私の問題は、を除く単一のユーザーからすべてのデータを更新するとidnum
、常にID番号が既に存在することを示していますか? 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 (ExistsKey("idnum", "TableVotersInfo", _idnum.ToString(), sc))
{
}
else
{
if (sc.State != ConnectionState.Open) sc.Open();
try
{
using (cmd = new SqlCommand(@"UPDATE TableVotersInfo SET Education=@ed, idnum=@idnum, FirstName=@firstname, MiddleName=@middlename, LastName=@lastname, SchoolYear=@schoolyear, ControlNum=@controlnum WHERE id=@id
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();
}
}
}
ID 番号を除く特定の行のすべての列を編集しても、「ID 番号は既に存在します!」と表示されます。それはあってはならないことです。