2014-10-12 169 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

相关问题