# 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();
= '잘못된 이니셜 부재 선언자.'
내 표 당신은 당신의 코드를 자세히 보면 잘 경우
감사합니다, 나는 그것을 보지 않았다 .. 이제 내 문제는 내가 IDNUM을 제외하고 단일 사용자의 모든 데이터를 업데이트하는 경우, 그것은 항상 쇼 그 ID 번호는 이미 존재합니까? 그 idnumber를 유지하려면 어떻게해야합니까? –
나는 당신의 접근 방식이 당신이 달성하기를 원하는 바가 정확하지 않다고 생각합니다. 유스 케이스 란 무엇입니까? idNumber를 기반으로 이미 사용자가있는 경우 사용자를 업데이트하고 다른 필드를 업데이트 (idNumber 필드 무시) 하시겠습니까? 사용자가 존재하지 않으면 삽입합니까? –
예, ID 번호가 데이터베이스에없는 경우 데이터를 삽입하려고합니다. 그러나 특정 행을 업데이트하고 ID 번호를 변경하지 않으면 여전히 "ID 번호가 이미 존재합니다!"라고 표시됩니다. –