更新命令更新错误的值

时间:2013-12-10 06:06:22

标签: c# visual-studio-2010 ms-access

我使用C#,MS Access作为数据库。我在数据库中创建具有与Table相同属性的类,并尝试使用在where条件中使用Reflection和类键值来更新此类属性来更新数据库以进行更新。以下是处理此问题的方法:

    public void UpdateDBByObject(object objClass, string key, object keyValue, string tableName = null)
    {
        string _updateQuery = string.Empty;

        Type objType = objClass.GetType();
        List<PropertyInfo> propertyList = new List<PropertyInfo>(objType.GetProperties());

        Dictionary<string, object> _props = new Dictionary<string, object>();

        _updateQuery += "update " + (string.IsNullOrEmpty(tableName) ? objType.ToString().Split('.').LastOrDefault().TrimEnd('s') : tableName) + " set";

        foreach (var prop in propertyList)
        {
            string _name = prop.Name;
            if (_name == key) continue;

            _updateQuery += " [" + _name + "] = ?,";

            _props.Add(_name, prop.GetValue(objClass, null));
        }
        _updateQuery = _updateQuery.TrimEnd(',');
        _updateQuery += " where " + key + " = ?";

        OleDbCommand cmd = new OleDbCommand();
        OleDbConnection conn;
        cmd.CommandType = CommandType.Text;

        cmd.CommandText = _updateQuery;

        foreach (string value in _props.Keys)
        {
            object _addValue;
            cmd.Parameters.AddWithValue("@" + value, _props.TryGetValue(value, out _addValue));
        }

        cmd.Parameters.AddWithValue("@" + key, keyValue);

        conn = GetOpenConnection();
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        CloseConnection(conn);
    }

此方法正在工作但更新数据库中的错误值,即对于字符串值,它更新“-1”值,对于DateTime,它更新最小DateTime值。请找出错误并告诉我。

2 个答案:

答案 0 :(得分:1)

每次TryGetValue(value,out object)值{p> bool时,

object outValue; cmd.Parameters.AddWithValue("@" + value, _props.TryGetValue(value, out outValue)); 都会超出bool值。

{{1}}

答案 1 :(得分:0)

我在下面的代码行中添加了bool值作为参数:

cmd.Parameters.AddWithValue("@" + value, _props.TryGetValue(value, out _addValue));

更改此代码后工作正常。