C# 更新命令更新错误的值

C# 更新命令更新错误的值,c#,visual-studio-2010,ms-access,C#,Visual Studio 2010,Ms Access,我正在使用C#,MS Access作为数据库。我创建了一个属性与数据库中的表相同的类,并尝试使用中的反射和类键值来更新数据库,其中条件用于更新。以下是处理此问题的方法: public void UpdateDBByObject(object objClass, string key, object keyValue, string tableName = null) { string _updateQuery = string.Empty; Ty

我正在使用C#,MS Access作为数据库。我创建了一个属性与数据库中的表相同的类,并尝试使用
中的反射和类键值来更新数据库,其中
条件用于更新。以下是处理此问题的方法:

    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);
    }
public void updatedbyobject(对象对象对象类,字符串键,对象键值,字符串tableName=null)
{
string _updateQuery=string.Empty;
类型objType=objClass.GetType();
List propertyList=新列表(objType.GetProperties());
字典_props=新字典();
_updateQuery++=“update”+(string.IsNullOrEmpty(tableName)?objType.ToString().Split('..).LastOrDefault().TrimEnd('s'):tableName)+“set”;
foreach(propertyList中的var prop)
{
字符串_name=prop.name;
如果(_name==key)继续;
_updateQuery+=“[”+_name+“]=?,”;
_Add(_name,prop.GetValue(objClass,null));
}
_updateQuery=_updateQuery.TrimEnd(',');
_updateQuery+=“其中”+键+“=?”;
OleDbCommand cmd=新的OleDbCommand();
OLEDB连接接头;
cmd.CommandType=CommandType.Text;
cmd.CommandText=\u updateQuery;
foreach(props.Keys中的字符串值)
{
对象_addValue;
cmd.Parameters.AddWithValue(“@”+value,_props.TryGetValue(value,out_addValue));
}
cmd.Parameters.AddWithValue(“@”+键,keyValue);
conn=GetOpenConnection();
cmd.Connection=conn;
cmd.ExecuteNonQuery();
闭合连接(conn);
}

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

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

cmd.Parameters.AddWithValue("@" + value, _props.TryGetValue(value, out _addValue));
更改此代码后工作正常。

TryGetValue(值,输出对象)
将输出布尔值,因此每次它都将输出布尔值

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

props.TryGetValue(value,out\u addValue)返回bool@ankushkay karun rahilat bhau he…vadhiv编程…mala ghanta zepat nahiye kay lihilay代码to@F.R.I.E.N.D.S. 如果你知道伊什卡的密码,那么你就明白了@Priyank谢谢你指出我的错误。。!现在我更改代码。它正在工作。
条件表达式中的数据类型不匹配。
从ExecuteOnQuery语句抛出的exeption