好好主持这一段时间,我无法理解为什么它没有更新我的数据库.....我没有得到错误消息它运行得很好。代码
if (e.KeyCode == Keys.Enter)
{
// #WORK
string searchtext = txtAssetScanned.Text;
string searchcmd = "UPDATE " + lstCompCode.SelectedItem.ToString() + " SET " + lstCompCode.SelectedItem.ToString() + ".[Inventory Status]= \"FOUND\" WHERE [Inventory number] like '*" + searchtext + "';";
MessageBox.Show(searchcmd);
myConnection.Open();
OleDbCommand search = new OleDbCommand();
search.Connection = myConnection;
search.CommandText = searchcmd;
search.ExecuteNonQuery();
myConnection.Close();
}
答案 0 :(得分:1)
这里有一些东西出现:
'value'
而不是双引号(即"value"
)。SelectedValue
属性而不是SelectedItem.ToString()
来确保使用正确的值。Foo.[Inventory number]
等)。您可以按如下方式应用这些更改:
using(var connection = new OleDbConnection("{your-connection-string}"))
{
// Build your query with parameters
var query = "UPDATE ? SET [Inventory Status] = 'FOUND' WHERE [Inventory number] LIKE ?";
using(var command = new OleDbCommand(query, connection))
{
connection.Open();
// Add your parameters
command.Parameters.AddWithValue("@table",lstCompCode.SelectedValue);
command.Parameters.AddWithValue("@search", "*" + txtAssetScanned.Text);
// Now that your queries are added, perform your update
command.ExecuteNonQuery();
}
}
可能的问题
正如我所提到的,某些数据库不允许您将表名作为参数传递而不依赖于存储过程,动态SQL等。您可能最好只是定义要直接使用的表:
var query = "UPDATE [YourTableName] SET [Inventory Status] = 'FOUND' WHERE [Inventory number] LIKE ?";
由于您无法通过via参数传递此信息,因此您可以考虑添加一些逻辑来确定使用哪些逻辑并对其进行硬编码以及一些卫生设施以避免可能的恶意行为。