参数化查询无法在C#中工作

时间:2017-08-14 06:30:24

标签: c# sql parameters

我目前正处于一个角落,不知道为什么以下代码无法正常执行并更新数据库(Access)。

  1. newUser =所有新用户的数据,包括其ID
  2. list =包含与页面复选框对应的GermanResources(类)条目列表。类包括.Name(复选框的文本值)和.Value(选中?1或0)
  3. 我想用每个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;
        }
    

2 个答案:

答案 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.