2013-10-31 3 views
0

# winform에서 데이터베이스의 데이터를 업데이트 중입니다. 업데이트 할 때 내 IDnum 내 데이터가있는 경우 업데이트 싶지 않아요. 내 bool 메서드를 수행하는 데 문제가 있습니다.ID 중복 가능성없이 데이터를 업데이트하는 방법은 무엇입니까?

public bool ExistsKey(string keyField, string table, string value, SqlConnection con){  
    try { 
    if(con.State != ConnectionState.Open) con.Open(); 
    using(SqlCommand com = new SqlCommand(
      string.Format("IF EXISTS(SELECT * FROM {0} WHERE {1}='{2}') SELECT 1 ELSE SELECT 0", 
         table, keyField, value), con){ 
var result = com.ExecuteScalar(); 
return result != null && (int)result == 1; 
    } 
    } catch { 
return false; 
    } 
    finally { 
      con.Close(); 
    }  
    } 

    public void Update() 
    { 
     if (ExistsKey("idnum", "TableVotersInfo", _idnum.ToString(), sc)) 
     { 
      MessageBox.Show("ID number already exist!"); 
      FAddVoters._cleardata = "0"; 
      FAddVoters._checkID = checkID; 
     } 
     else 
     { 
      if (sc.State != ConnectionState.Open) sc.Open(); 
      try 
      { 
       using (cmd = new SqlCommand(@"UPDATE TableVotersInfo SET [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] WHERE [email protected] 
             SELECT @ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum 
             WHERE @id NOT IN (SELECT idNum FROM TableVotersInfo);", sc)) 
       { 
        cmd.Parameters.AddWithValue("@id", _id); 
        cmd.Parameters.AddWithValue("@ed", _ed); 
        cmd.Parameters.AddWithValue("@idnum", _idnum); 
        cmd.Parameters.AddWithValue("@firstname", _firstname); 
        cmd.Parameters.AddWithValue("@middlename", _middlename); 
        cmd.Parameters.AddWithValue("@lastname", _lastname); 
        cmd.Parameters.AddWithValue("@schoolyear", _schoolyear); 
        cmd.Parameters.AddWithValue("@controlnum", _controlnum); 

        cmd.ExecuteNonQuery();// <-- this is what you want 
        MessageBox.Show("Data Successfully Updated!"); 
        FAddVoters._cleardata = cleardata; 
        FAddVoters._checkID = "0"; 
       } 
      } 
      catch (SqlException ex) 
      { 
       if(ex.Number == 2627)//duplicated primary key 
       { 
        MessageBox.Show("ID number already exist!"); 
        FAddVoters._cleardata = "0"; 
        FAddVoters._checkID = checkID; 
       } else 
       { 
        MessageBox.Show("There was some error while attempting to update!\nTry again later."); 
       } 
      } 
      finally 
      { 
       sc.Close(); 
      } 
     } 
    } 

내가 뭘 잘못하고 있니? 문제는 내 bool에 있습니다.

약간의 오차 등이

var result = com.ExecuteScalar(); = '잘못된 이니셜 부재 선언자.'

표 당신은 당신의 코드를 자세히 보면 잘 경우

my table

답변

0

:

using(SqlCommand com = new SqlCommand(
     string.Format("IF EXISTS(SELECT * FROM {0} WHERE {1}='{2}') SELECT 1 ELSE SELECT 0", 
        table, keyField, value), con){ 

생각하는 컴파일러의 원인 ") 사기꾼" 누락 브라켓이 있습니다 나머지는 SqlCommand 구성 초기화 프로그램의 일부입니다. 당신이 누락 된 브라켓에 넣어 경우 모든 확인 될 것입니다 : id 컬럼이

using(SqlCommand com = new SqlCommand(
     string.Format("IF EXISTS(SELECT * FROM {0} WHERE {1}='{2}') SELECT 1 ELSE SELECT 0", 
        table, keyField, value), con)) { 
+0

감사합니다, 나는 그것을 보지 않았다 .. 이제 내 문제는 내가 IDNUM을 제외하고 단일 사용자의 모든 데이터를 업데이트하는 경우, 그것은 항상 쇼 그 ID 번호는 이미 존재합니까? 그 idnumber를 유지하려면 어떻게해야합니까? –

+0

나는 당신의 접근 방식이 당신이 달성하기를 원하는 바가 정확하지 않다고 생각합니다. 유스 케이스 란 무엇입니까? idNumber를 기반으로 이미 사용자가있는 경우 사용자를 업데이트하고 다른 필드를 업데이트 (idNumber 필드 무시) 하시겠습니까? 사용자가 존재하지 않으면 삽입합니까? –

+0

예, ID 번호가 데이터베이스에없는 경우 데이터를 삽입하려고합니다. 그러나 특정 행을 업데이트하고 ID 번호를 변경하지 않으면 여전히 "ID 번호가 이미 존재합니다!"라고 표시됩니다. –

0

이후 int 당신이 하나의 qoutes 필요하지 않습니다. 코드

"IF EXISTS(SELECT * FROM {0} WHERE {1}={2}) SELECT 1 ELSE SELECT 0"

아래로 시도 :

using(SqlCommand com = new SqlCommand(
      string.Format("IF EXISTS(SELECT * FROM {0} WHERE {1}={2}) SELECT 1 ELSE SELECT 0", 
         table, keyField, value), con)) 
{ 
    var result = com.ExecuteScalar(); 
    return result != null && (int)result == 1; 
} 
+0

고마워, 이제 내 문제는 idnum을 제외하고 단일 사용자의 모든 데이터를 업데이트하면 항상 해당 ID 번호가 이미 있음을 보여주는 것입니까? 그 idnumber를 유지하려면 어떻게해야합니까? –

관련 문제