首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# Access 資料庫「資料類型不匹配」錯誤解決:欄位型別與參數化查詢

     編輯:程式設計綜合問答

錯誤現象

adapter.Fill(table) 拋出「標準運算式中資料類型不匹配」,SQL 為 SELECT * FROM [user] WHERE ID = '...' AND 密碼 = '...'。

根本原因

ID 欄位在 Access 中為數值型別(Long Integer/Double),SQL 中卻用單引號包裹當作字串,導致型別衝突。

正確寫法:移除數值欄位引號 + 參數化查詢

// 錯誤
string sql = "SELECT * FROM [user] WHERE ID = '" + textBox1.Text + "' AND 密碼 = '" + textBox2.Text + "'";

// 正確(數值欄位無引號)
string sql = "SELECT * FROM [user] WHERE ID = " + textBox1.Text + " AND 密碼 = '" + textBox2.Text + "'";

// 最佳:參數化查詢(防注入、自動處理型別)
string sql = "SELECT * FROM [user] WHERE ID = @id AND 密碼 = @pwd";
using (var cmd = new OleDbCommand(sql, conn)) {
    cmd.Parameters.Add("@id", OleDbType.Integer).Value = int.Parse(textBox1.Text);
    cmd.Parameters.Add("@pwd", OleDbType.VarWChar).Value = textBox2.Text;
    adapter.SelectCommand = cmd;
    adapter.Fill(table);
}

擴展:常見 Access 型別對應

Access 型別OleDbTypeC# 型別SQL 寫法
Long IntegerIntegerint無引號
DoubleDoubledouble無引號
TextVarWCharstring單引號
Date/TimeDateDateTime#yyyy/mm/dd#
Yes/NoBooleanboolTrue/False

安全警示

原代碼直接拼接用戶輸入構造 SQL,極易遭受 SQL 注入攻擊。務必使用參數化查詢,切勿信任任何外部輸入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved