Sql server @FreeTDS中的变量
我正在尝试一些旧数据库代码的快速原型端口,以使用FreeTDS库。目前,我正在查看一个类似于的查询Sql server @FreeTDS中的变量,sql-server,linux,freetds,Sql Server,Linux,Freetds,我正在尝试一些旧数据库代码的快速原型端口,以使用FreeTDS库。目前,我正在查看一个类似于的查询 SELECT x,y,z from MyTable WHERE id = @arg1 当我执行查询时,自然会出现一个错误,如必须声明标量变量“@arg1”。 但有一件事我想不通。如何声明此变量?我已经看了一遍又一遍,我似乎找不到如何解决这个应该是琐碎的任务 我目前使用的代码是: if(dbcmd(proc, "SELECT x,y,z from MyTable WHERE id = @arg1"
SELECT x,y,z from MyTable WHERE id = @arg1
当我执行查询时,自然会出现一个错误,如必须声明标量变量“@arg1”。
但有一件事我想不通。如何声明此变量?我已经看了一遍又一遍,我似乎找不到如何解决这个应该是琐碎的任务
我目前使用的代码是:
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;
}
}
if(dbcmd(proc,“从MyTable中选择x、y、z,其中id=@arg1”)!=success){
返回fail(“未能访问dbcmd()”;
}
if(dbsqlexec(proc)!=成功){
返回fail(“dbsqlexec()失败”);
}
而((retcode=dbresults(proc))==成功){
while(dbnextrow(proc)!=没有更多行){
int len=dbdatlen(过程,1);
char*data=(char*)dbdata(proc,1);
cout您可以尝试“DECLARE@MyVariable int”或“@arg1”,OleDbType.Integer”添加为dbcmd(dbproc,“HERE”);在dbcmd(proc,“SELECT…”)之后
我不认为有任何API,但我相信这是您可以使用的方式。您能展示一下构建和执行查询的代码吗?FreeTDS是一个低级协议,不是ORM或查询工具,所以在语法问题上,您通常需要咨询Microsoft。添加了示例代码。是的,我知道FreeTDS是低级的。我是tryiNG将MSSQL集成到一个传统的C++应用程序中,所以在这种情况下它非常适合我,如果我能详细了解一下……您可以尝试“声明@ MyValueint”或“@ ARG1”,OleDbType。整数“添加为dBCMD(dBPRC,这里));在您的DCMDD(PROC,“select…”)之后@AvkashChauhan这基本上就是我目前所做的。然而,我本来希望使用一个二进制API来设置变量,但您描述的方法是有效的。如果没有更好的方法,我会接受这个答案:)没有找到它的API,所以我现在决定使用DECLARE。
dbcmd(dbproc,"SELECT x,y,z from MyTable WHERE id = @arg1");
dbcmd(dbproc, "DECLARE @arg1 int" );