Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server @FreeTDS中的变量_Sql Server_Linux_Freetds - Fatal编程技术网

Sql server @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"

我正在尝试一些旧数据库代码的快速原型端口,以使用FreeTDS库。目前,我正在查看一个类似于的查询

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" );