2013-12-10 1 views
0

데이터베이스에서 C#, MS Access를 사용하고 있습니다. 데이터베이스에서 테이블과 동일한 속성을 가진 클래스를 만들고 Refat 및 클래스 키 값을 사용하여이 클래스 속성으로 데이터베이스를 업데이트하려고합니다. where 조건을 업데이트하십시오 목적.업데이트 명령이 잘못된 값을 업데이트합니다.

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", 작동하지만 데이터베이스에 잘못된 값을 업데이트 값, 날짜 시간 것이 분 날짜 시간 값을 업데이트 : 다음은이 문제를 해결할 방법이다. 오류를 찾아 알려주세요.

+1

props.TryGetValue (_addValue 제한 값) F.R.I.E.N.D.S @ – Priyank

+0

@ankush 케이 캐런 rahilat bhau 그는 ... vadhiv 프로그래밍 ... 말라 ghanta zepat nahiye 케이 lihilay 코드를 반환합니다. 팬케이크, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, 팬, –

+0

에 부울 –

답변

1

TryGetValue(value,out object) 따라서 bool 값은 매번 bool 값이됩니다.

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

나는 코드의 라인을 다음 paramenter으로 부울 값을 추가 :이 코드를 변경하면 잘 작동

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

후.

관련 문제