2012-01-08 33 views
4

以下代碼創建一個表並使用數據填充數據庫。運行以下代碼時,我收到'Parameter count mismatch'上的錯誤query.exec()。但是,如果我使用註釋行代替,則一切正常。我如何濫用準備功能?QSqlQuery - 準備失敗,'參數計數不匹配'

QSqlQuery query; 
if (query.exec("CREATE TABLE Users (u_ID INT IDENTITY(1,1) PRIMARY KEY, cName varchar(25) UNIQUE)")) 
{ 
    for (int i=1;i<=100;++i) 
    { 
     QString uName; 
     uName = "user" + QString::number(i); 
     query.prepare("INSERT INTO Users (cName) VALUES(':UNAME')"); 
     query.bindValue(":UNAME",uName); 
     query.exec(); 
     //query.exec("INSERT INTO Users (cName) VALUES('" + uName + "')"); 
     if (query.lastError().isValid()){ 
      QMessageBox::information(0,"ERR!",query.lastError().text()); 
     } 
    } 
} 

回答

5

只需使用:

query.prepare("INSERT INTO Users (cName) VALUES(:UNAME)"); 

即不要引用綁定變量。

+0

+1:圍繞字符串的''',字符串轉義以及所有其他類型注意事項都在參數化查詢中處理。 – MatBailie 2012-01-08 18:59:43

+0

那麼,使用準備對'原始'用戶數據安全嗎? – Serodis 2012-01-08 19:05:20

+0

是的,如果你在這裏使用綁定變量。 – Mat 2012-01-08 19:05:55