2012-06-02 1 views
0

Я пытаюсь использовать быстрый прототип-порт какого-то старого кода базы данных для использования библиотеки FreeTDS. В настоящее время я смотрю на запрос похож на@variables в FreeTDS

SELECT x,y,z from MyTable WHERE id = @arg1 

Когда я выполнить запрос, я, естественно, получаю сообщение об ошибке, как Must declare the scalar variable "@arg1".

Но одна вещь ускользает от меня. Как объявить эту переменную? Я просматривал API docs and code examples снова и снова, и я не могу найти, как решить эту непростое задание.

Код Сейчас я использую:

if(dbcmd(proc, "SELECT x,y,z from MyTable WHERE id = @arg1") != SUCCEED) { 
    return fail("Failed to dbcmd()"); 
} 

if(dbsqlexec(proc) != SUCCEED) { 
    return fail("Failed to dbsqlexec()"); 
} 

while((retcode=dbresults(proc)) == SUCCEED) { 
    while(dbnextrow(proc) != NO_MORE_ROWS) { 
    int len = dbdatlen(proc, 1); 
    char* data = (char*)dbdata(proc, 1); 
    cout << string(data, len) << endl; 
    } 
} 
+0

Can. вы показываете код, в котором вы строите и выполняете свой запрос? FreeTDS - это проблема низкого уровня ocol, а не инструмент ORM или запроса, поэтому вам обычно необходимо обратиться к [документации] Microsoft (http://msdn.microsoft.com/en-us/library/ms187953 (v = sql.105) .aspx) в случае синтаксиса вопросы. – Pondlife

+0

Добавлен пример кода. Да, я знаю, что FreeTDS - это низкий уровень. Я пытаюсь интегрировать MSSQL с унаследованным C++-приложением, поэтому он действительно подходит мне в этом случае, если я могу просто обойти детали ... – Krumelur

+0

Вы можете попробовать либо «DECLARE @MyVariable int», либо «@ arg1 ", OleDbType.Integer", чтобы добавить как dbcmd (dbproc, "_HERE_"), после вашего dbcmd (proc, "SELECT ....."); – AvkashChauhan

ответ

0

Вы можете попробовать либо "DECLARE @MyVariable Int" или "@ arg1", OleDbType.Integer»добавить в dbcmd (dbproc, "ЗДЕСЬ"); после dbcmd (прок, «SELECT .....»);

dbcmd(dbproc,"SELECT x,y,z from MyTable WHERE id = @arg1"); 
dbcmd(dbproc, "DECLARE @arg1 int"); 

Я do'nt думаю, что если есть какие-либо API, однако я уверен, что это так, как вы могли бы использовать его

+0

Не нашел API для него, поэтому я решил использовать DECLARE на данный момент , – Krumelur

 Смежные вопросы

  • Нет связанных вопросов^_^