C# 拼接 SQL 執行 sqlDataAdapter.Fill 時,輸入數字正常,輸入漢字(如「你好」)報錯:列名 '你好' 無效。
SQL 拼接時漢字值未加單引號,導致數據庫將其解析為列名而非字符串字面量。例如:
// 錯誤拼接
sql = "SELECT * FROM Users WHERE Name = " + txtName.Text;
// 輸入「你好」生成 → SELECT * FROM Users WHERE Name = 你好 -- 視為列名
// 正確拼接
sql = "SELECT * FROM Users WHERE Name = '" + txtName.Text.Replace("'", "''") + "'";
// 生成 → SELECT * FROM Users WHERE Name = '你好' -- 視為字符串
string sql = "SELECT * FROM Users WHERE Name = @Name";
using (SqlConnection conn = new SqlConnection(connStr))
using (SqlCommand cmd = new SqlCommand(sql, conn)) {
cmd.Parameters.AddWithValue("@Name", txtName.Text); // 自動處理引號、轉義、類型
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
}
CHAR vs VARCHAR、DECIMAL 精度)需顯式 cmd.Parameters.Add("@p", SqlDbType.Char, 10).Value = val;。