簡體   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