ODBC中的SQL语句

时间:2015-10-12 14:18:30

标签: sql c odbc hana

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

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

2 个答案:

答案 0 :(得分:1)

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

    char szSQL[2048];
    sprintf (szSQL, "INSERT INTO %s values('%s', %d,'%s');", szTableName, strVar1, intVar, strVar2);
    SQLExecDirect(hStmt, szSQL, SQL_NTS);

注意字符串变量周围的单引号,注意整数变量周围没有引号。请注意,这是TABLE的要求,而不是C的要求。如果表中的整数变量被定义为字符串字段,那么您还必须在SQL语句'%d'中的变量周围放置引号。

最后,如果字符串变量可以包含单引号,那么必须将它们作为两个单引号转义。

答案 1 :(得分:1)

您有两种选择:

  1. 您可以使用sprintf构建您的SQL字符串,正如Paul Ogilvie在他的回答中所示;
  2. 您可以使用prepared statement并在单独的操作中将变量绑定到它(请参阅链接示例)。

如果您使用不同的值多次重复相同的语句(如链接所示),准备好的语句可以为您带来一些性能。它们还可以防止SQL注入攻击(无论如何),但是无论如何都应该清理输入。权衡是准备好的声明需要更多的编码工作。