我使用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值。请找出错误并告诉我。
答案 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));
更改此代码后工作正常。