繁体   English   中英

ODBC中的SQL语句

[英]SQL Statement in ODBC

我正在用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);

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

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

您有两种选择:

  1. 您可以使用sprintf来构建SQL字符串,如Paul Ogilvie在其答案中所示。
  2. 您可以使用准备好的语句并将变量绑定到单独的操作中(请参见链接中的示例)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM