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

ASP.NET 中 varchar 字段只能存入數字的問題排查

     編輯:程式設計綜合問答

問題現象

數據庫表 customer 的 customer_name 字段類型為 varchar,但插入包含字母、符號的字符串(如 "lly.sfa")失敗,純數字字符串(如 "54215642")卻能成功插入。

代碼片段分析

string sqlupdata = "insert into customer(customer_id,customer_name,customer_password,customer_phone,customer_level) values(" + id + "," + phonenumber + "," + username + "," + password + "," + "5) ";

根本原因

SQL 拼接時字符串值缺少單引號包裹。

  • 當 username = "54215642" 時,生成 SQL:... values(..., 54215642, ...) ... → 數據庫隱式轉換為字符串,插入成功
  • 當 username = "lly.sfa" 時,生成 SQL:... values(..., lly.sfa, ...) ... → 數據庫嘗試解析 lly.sfa 為標識符/列名,語法報錯

正確的 SQL 拼接方式

string sqlupdata = "insert into customer(customer_id,customer_name,customer_password,customer_phone,customer_level) values(" 
    + id + ",'" + phonenumber + "','" + username + "','" + password + "'," + "5) ";

所有字符串類型字段值必須用單引號括起來。

最佳實踐:參數化查詢(強烈推薦)

string sql = "INSERT INTO customer (customer_id, customer_name, customer_password, customer_phone, customer_level) VALUES (@id, @name, @pwd, @phone, 5)";
using (SqlCommand cmd = new SqlCommand(sql, conn)) {
    cmd.Parameters.AddWithValue("@id", id);
    cmd.Parameters.AddWithValue("@name", username);
    cmd.Parameters.AddWithValue("@pwd", password);
    cmd.Parameters.AddWithValue("@phone", phonenumber);
    cmd.ExecuteNonQuery();
}

優勢:

  1. 徹底避免 SQL 注入
  2. 自動處理數據類型轉換與轉義
  3. 代碼可讀性與維護性更高

其他代碼問題補充

  • TextBox3.Text. 和 TextBox4.Text.() 有語法錯誤(多餘的點)
  • Random 實例化在循環/高頻調用中應聲明為 static 或單例,避免種子相同生成重複 ID
  • 異常處理僅 throw; 會丟棄堆棧信息,建議記錄日誌後拋出自定義異常
  • VS2015 內置數據庫通常指 LocalDB,連接字符串需確認正確

總結

問題核心在於 SQL 拼接忽略字符串單引號。改用參數化查詢可一次性解決語法錯誤、注入風險與類型轉換問題。

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