2014-10-12 130 views
1
OleDbCommand computerStatus = new OleDbCommand("update Computer SET Status= 'Occupied' where PcNumber='" + cboComputerNo.Text + "'", con); 
computerStatus.ExecuteNonQuery(); 

這是我的代碼。 pcNumber是自動編號我得到一個錯誤,它想要我將數據類型更改爲字符串,但我需要它是自動編號。標準表達式中的數據類型不匹配Access 2013

+1

使用參數來避免sql注入。使用int.TryParse將文本轉換爲數字。 – LarsTech 2014-10-12 12:17:46

+0

已經使用TryParse和int.parse在我第一次使用參數時不起作用。 – 2014-10-12 12:32:09

回答

0

AutoNumber is auto number。由於它是一個數值,因此不需要使用單引號。

但更重要的是,您應該始終使用parameterized queries。這種字符串連接對於SQL Injection攻擊是開放的。

同樣使用using statement來處置您的OleDbConnectionOleDbCommand

using(OleDbConnection con = new OleDbConnection(conString)) 
using(OleDbCommand computerStatus = con.CreateCommand()) 
{ 
    computerStatus.CommandText = "update Computer SET Status= ? where PcNumber = ?"; 
    computerStatus.Parameters.AddWithValue("@status", "Occupied"); 
    computerStatus.Parameters.AddWithValue("@number", cboComputerNo.Text); 
    computerStatus.ExecuteNonQuery(); 
} 

由於LarsTech指出,你可能想檢查你的cboComputerNo.Text串是用Int.TryParse method有效的整數。

+0

爲什麼我需要使用?爲什麼不把代碼縮小呢? – 2014-10-12 12:31:00

+0

@AllanPatrickCaldito使用語句處理非管理資源。檢查這些問題:http://stackoverflow.com/questions/10057334/when-should-i-use-the-using-statement和http://stackoverflow.com/questions/212198/what-is-the-c-銳採用嵌段和爲什麼 - 宜 - 我使用的,它 – 2014-10-12 12:51:28

相關問題