我目前正处于一个角落,不知道为什么以下代码无法正常执行并更新数据库(Access)。
我想用每个GermanResource的复选框值更新数据库。
如果我将@acc_Value替换为值1,则此代码有效。它似乎不适用于第一个参数。调试这表明我在适当的时候都有适当的值,因为" 1"我知道数据类型没有不匹配。
注意:无论是否有参数都没有错误。 我很感激有关此的任何意见。
这是生成的CommandTexts之一: UPDATE VMS_GRM_GermanResource_Access SET VTOFZN = @acc_Value WHERE UserId = @userId
private bool NewUser_Insert_GermanResourceAccess(OleDbConnection connection, User newUser, List<GermanResource> list)
{
bool result = false;
try
{
foreach (var item in list)
{
string column = item.Name.Replace(" ", "");
string query = @"UPDATE VMS_GRM_GermanResource_Access SET " + column + " = @acc_Value WHERE UserId = @userId";
OleDbCommand command = new OleDbCommand(query, connection);
command.Parameters.AddWithValue("@userId", newUser.Id);
command.Parameters.Add(new OleDbParameter("@acc_Value", OleDbType.Integer, 1));
command.Parameters["@acc_Value"].Value = item.Access;
command.ExecuteNonQuery();
}
result = true;
}
catch (OleDbException ex)
{
UADConnection.Close();
MessageBox.Show(ex.ErrorCode.ToString() + ": " + ex.Message);
return result;
}
return result;
}
答案 0 :(得分:1)
使用它来准备sql语句: -
string query = @"UPDATE VMS_GRM_GermanResource_Access SET column_name=" +
@acc_Value + " WHERE UserId = " +@userId+";
答案 1 :(得分:0)
@Tetsuya Yamamoto:
OLEDB parameters were not in order according to the query. Swapping them around to match the order in the query set things straight. All good again and thanks for everyone's inputs.