ODBC中的SQL语句

ODBC中的SQL语句,sql,c,odbc,hana,Sql,C,Odbc,Hana,我正在用C编写一个ODBC应用程序! 我的数据库中有一个表,我将用一些变量填充它:Var1,Var2。。。它们是某个函数的输出。 问题是:在SQLExecDirect函数中,如何将变量传递给SQL语句(StatementText) SQLExecDirect(hStmt, (SQLCHAR *)"INSERT INTO Table1 values (Var1, Var2, ...)", SQL_NTS); 在C中的SQL中,您可以通过在缓冲区中打印(格式化)完整的SQL语句来创建它。因此,如果

我正在用C编写一个ODBC应用程序! 我的数据库中有一个表,我将用一些变量填充它:Var1,Var2。。。它们是某个函数的输出。 问题是:在SQLExecDirect函数中,如何将变量传递给SQL语句(StatementText)

SQLExecDirect(hStmt, (SQLCHAR *)"INSERT INTO Table1 values (Var1, Var2, ...)", SQL_NTS);

在C中的SQL中,您可以通过在缓冲区中打印(格式化)完整的SQL语句来创建它。因此,如果要将变量的值插入表中,可以将它们的值打印到缓冲区中,如:

    char szSQL[2048];
    sprintf (szSQL, "INSERT INTO %s values('%s', %d,'%s');", szTableName, strVar1, intVar, strVar2);
    SQLExecDirect(hStmt, szSQL, SQL_NTS);
请注意字符串变量周围有单引号,整数变量周围没有引号。请注意,这是表的要求,而不是C。如果表中的整数变量定义为字符串字段,则还必须在SQL语句中的变量周围加引号,
'%d'

最后,如果字符串变量可以包含单引号,则必须将其转义为两个单引号。

您有两个选项:

  • 您可以使用
    sprintf
    构建SQL字符串,正如Paul Ogilvie在他的回答中所示;
  • 您可以使用,并在单独的操作中将变量绑定到它(参见链接处的示例)。 如果您使用不同的值多次重复同一条语句(如链接所示),准备好的语句可以为您带来一些性能。它们还可以防止SQL注入攻击(无论如何,在一定程度上),但无论如何,您都应该清理输入。折衷是,准备好的语句需要更多的编码工作