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