我正在嘗試將客戶添加到 MySQL 資料庫,然后用資料填充 DataGridView。沒有addCustCmd.Prepare(); 方法一切正常。客戶被添加到資料庫中,我的 DGV 被新資料填充。但我想為這些輸入添加安全性并防止 SQL 注入,因此 Prepare(); 方法。
public static void addCust(string cCustomerName, string cAddress, string cAddress2, int cPhone, int cPostalCode, string cCity, string cCountry)
{
MySqlConnection addCustConn = new MySqlConnection(connString);
MySqlCommand addCustCmd = new MySqlCommand("INSERT INTO country VALUES "
"(NULL, @countryName, CURRENT_TIMESTAMP,"
"@user, CURRENT_TIMESTAMP, @user);"
"INSERT INTO city "
"VALUES(NULL, @city, LAST_INSERT_ID(), CURRENT_TIMESTAMP, @user, CURRENT_TIMESTAMP, "
"@user);"
"INSERT INTO address "
"VALUES(NULL, @address, @address2, LAST_INSERT_ID(), @postalCode, @phone, CURRENT_TIMESTAMP, @user,"
"CURRENT_TIMESTAMP, @user);"
"INSERT INTO customer "
"VALUES(NULL, @customerName, LAST_INSERT_ID(), active, CURRENT_TIMESTAMP, @user,"
"CURRENT_TIMESTAMP, @user);", addCustConn);
addCustConn.Open();
addCustCmd.Parameters.AddWithValue("@countryName", cCountry);
addCustCmd.Parameters.AddWithValue("@city", cCity);
addCustCmd.Parameters.AddWithValue("@address", cAddress);
addCustCmd.Parameters.AddWithValue("@address2", cAddress2);
addCustCmd.Parameters.AddWithValue("@postalCode", cPostalCode);
addCustCmd.Parameters.AddWithValue("@phone", cPhone);
addCustCmd.Parameters.AddWithValue("@customerName", cCustomerName);
addCustCmd.Parameters.AddWithValue("@user", LoginForm.currentUser);
addCustCmd.Prepare(); //Commenting this out allows the program to run no problems
addCustCmd.ExecuteNonQuery();
addCustConn.Close();
}//end addCust
這是當我嘗試運行它時彈出的錯誤: “您的 SQL 語法有錯誤;請查看與您的 MySQL 服務器版本相對應的手冊,以獲取在 'INSERT INTO city VALUES(NULL, ? , LAST_INSERT_ID(), CURRENT_TIMESTAMP, ?, CURRENT' 在第 1 行"
uj5u.com熱心網友回復:
每個插入操作都必須是一個單獨的命令才能使用準備好的陳述句。
準備好的陳述句的 SQL 語法不支持多陳述句(即,單個字串中的多個陳述句由 ; 字符分隔)。
檔案來源
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/419871.html
標籤:
下一篇:VisualStudio2019#cRedirectNotWorkingonprocess.start檔案找不到
