SQL ODBC 中的语句

SQL Statement in ODBC

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

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

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

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

注意字符串变量周围的单引号,并注意整数变量周围没有引号。请注意,这是 TABLE 的要求,而不是 C 的要求。如果 table 中的整数变量定义为字符串字段,则还必须在 [=18] 中的变量周围放置引号=]语句,'%d'.

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

您有两个选择:

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

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