C# 如何检查ID是否已存储在数据库中?
我有一段代码,可以将数据插入数据库。我想检查要插入的ID是否已经在数据库中。但若它不在数据库中,那个么应该插入它。但是有一些错误,你能帮我解决吗C# 如何检查ID是否已存储在数据库中?,c#,winforms,sql-server-2008,C#,Winforms,Sql Server 2008,我有一段代码,可以将数据插入数据库。我想检查要插入的ID是否已经在数据库中。但若它不在数据库中,那个么应该插入它。但是有一些错误,你能帮我解决吗 public void Add() { sc.Open(); try { cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc); c
public void Add()
{
sc.Open();
try
{
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
cmd.Parameters.AddWithValue("@idnum", _idnum);
SqlDataReader rd = cmd.ExecuteReader();
if (rd.Read() == true)
{
MessageBox.Show("ID number already exist!");
rd.Close();
}
else
{
cmd = new SqlCommand("INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult) VALUES (@ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted');", 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();
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
编辑
我现在的错误是已经有一个与此命令关联的打开的DataReader,必须先关闭它。
更新
public void Update()
{
sc.Open();
try
{
cmd = new SqlCommand("UPDATE TableVotersInfo SET Education=@ed, idnum=@idnum, FirstName=@firstname, MiddleName=@middlename, LastName=@lastname, SchoolYear=@schoolyear, ControlNum=@controlnum WHERE id=@id", 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);
int res = cmd.ExecuteNonQuery();
if (res > 0)
{
MessageBox.Show("Successfully Updated!");
FAddVoters._cleardata = cleardata;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
尝试删除查询中的单引号,如下所示
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
并将变量的类型从string更改为int
要解决insert中的错误,请尝试以下代码
public void Add()
{
sc.Open();
try
{
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
cmd.Parameters.AddWithValue("@idnum", _idnum);
if (cmd.ExecuteScalar() != null)
{
MessageBox.Show("ID number already exist!");
}
else
{
cmd = new SqlCommand("INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult) VALUES (@ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted');", 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();
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
尝试删除查询中的单引号,如下所示
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
并将变量的类型从string更改为int
要解决insert中的错误,请尝试以下代码
public void Add()
{
sc.Open();
try
{
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
cmd.Parameters.AddWithValue("@idnum", _idnum);
if (cmd.ExecuteScalar() != null)
{
MessageBox.Show("ID number already exist!");
}
else
{
cmd = new SqlCommand("INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult) VALUES (@ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted');", 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();
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
尝试删除查询中的单引号,如下所示
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
并将变量的类型从string更改为int
要解决insert中的错误,请尝试以下代码
public void Add()
{
sc.Open();
try
{
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
cmd.Parameters.AddWithValue("@idnum", _idnum);
if (cmd.ExecuteScalar() != null)
{
MessageBox.Show("ID number already exist!");
}
else
{
cmd = new SqlCommand("INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult) VALUES (@ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted');", 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();
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
尝试删除查询中的单引号,如下所示
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
并将变量的类型从string更改为int
要解决insert中的错误,请尝试以下代码
public void Add()
{
sc.Open();
try
{
cmd = new SqlCommand("Select idnum from TableVotersInfo Where idnum=@idnum", sc);
cmd.Parameters.AddWithValue("@idnum", _idnum);
if (cmd.ExecuteScalar() != null)
{
MessageBox.Show("ID number already exist!");
}
else
{
cmd = new SqlCommand("INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult) VALUES (@ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted');", 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();
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
尝试cmd.Dispose()在再次初始化命令对象之前,在else{}中选择strong>。
这应该适用于你的情况 试试cmd.Dispose()在再次初始化命令对象之前,在else{}中选择strong>。
这应该适用于你的情况 试试cmd.Dispose()在再次初始化命令对象之前,在else{}中选择strong>。
这应该适用于你的情况 试试cmd.Dispose()在再次初始化命令对象之前,在else{}中选择strong>。
这应该适用于你的情况 关闭
else
中的datareader对象也关闭else中的datareader对象也关闭else中的datareader对象也关闭else中的datareader对象也您可以通过将值
更改为选择
并添加一个where
子句。执行此操作后,只需检查ExecuteNonQuery()
的返回值,查看0
或1
行是否已更新
public void Add()
{
sc.Open();
try
{
using(cmd = new SqlCommand(@"INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult)
SELECT @ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted'
WHERE @idNum 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);
var rowsAffected = cmd.ExecuteNonQuery();
if(rowsAffected == 0)
{
MessageBox.Show("ID number already exist!");
}
else
{
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
您可以通过将values
更改为select
并添加where
子句,而不是两个查询。执行此操作后,只需检查ExecuteNonQuery()
的返回值,查看0
或1
行是否已更新
public void Add()
{
sc.Open();
try
{
using(cmd = new SqlCommand(@"INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult)
SELECT @ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted'
WHERE @idNum 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);
var rowsAffected = cmd.ExecuteNonQuery();
if(rowsAffected == 0)
{
MessageBox.Show("ID number already exist!");
}
else
{
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
您可以通过将values
更改为select
并添加where
子句,而不是两个查询。执行此操作后,只需检查ExecuteNonQuery()
的返回值,查看0
或1
行是否已更新
public void Add()
{
sc.Open();
try
{
using(cmd = new SqlCommand(@"INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult)
SELECT @ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted'
WHERE @idNum 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);
var rowsAffected = cmd.ExecuteNonQuery();
if(rowsAffected == 0)
{
MessageBox.Show("ID number already exist!");
}
else
{
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
您可以通过将values
更改为select
并添加where
子句,而不是两个查询。执行此操作后,只需检查ExecuteNonQuery()
的返回值,查看0
或1
行是否已更新
public void Add()
{
sc.Open();
try
{
using(cmd = new SqlCommand(@"INSERT INTO TableVotersInfo (Education, idnum, FirstName, MiddleName, LastName, SchoolYear, ControlNum, VResult)
SELECT @ed, @idnum, @firstname, @middlename, @lastname, @schoolyear, @controlnum, 'Not Voted'
WHERE @idNum 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);
var rowsAffected = cmd.ExecuteNonQuery();
if(rowsAffected == 0)
{
MessageBox.Show("ID number already exist!");
}
else
{
MessageBox.Show("Data Stored Successfully!");
FAddVoters._cleardata = cleardata;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
sc.Close();
}
}
这个答案显示了“如果不存在则插入”的最佳实践-只需从idnum='@idnum'中删除单个引号,就可以将idnum=@idnumi编辑过的我的代码删除。对不起,我搞砸了,我以为我只是复制了Add方法。我确实复制了add and update方法。在if(rd.Read()==true)之后,请在再次执行之前关闭读取器。此答案显示了“如果不存在则插入”的最佳实践-只需从idnum='@idnum'中删除单个引号,使之成为idnum=@idnumi编辑的我的代码。对不起,我搞砸了,我以为我只是复制了Add方法。我确实复制了add and update方法。在if(rd.Read()==true)之后,请在再次执行之前关闭读取器。此答案显示了“如果不存在则插入”的最佳实践-只需从idnum='@idnum'中删除单个引号,使之成为idnum=@idnumi编辑的我的代码。对不起,我搞砸了,我以为我只是复制了Add方法。我确实复制了add and update方法。在if(rd.Read()==true)之后,请在再次执行之前关闭读取器。此答案显示了“如果不存在则插入”的最佳实践-只需从idnum='@idnum'中删除单个引号,使之成为idnum=@idnumi编辑的我的代码。对不起,我搞砸了,我以为我只是复制了Add方法。我在if(rd.Read()==true)之后复制了add和update方法,在再次执行之前关闭读取器代码>?或者?现在我有一个错误已经有一个与此命令关联的打开的DataReader,必须先关闭。
有一个错误,对象引用未设置为对象的实例。
@LyndonBrozTonelete哦,是的!忘记删除未使用的行rd.Close()代码>请参见更新,如下所示int check=Convert.ToInt32(_idnum)代码>?或者?现在我有一个错误已经有一个与此命令关联的打开的DataReader,必须先关闭。
有一个错误,对象引用未设置为对象的实例。
@LyndonBrozTonelete哦,是的!忘记删除未使用的行rd.Close()代码>请参见更新,如下所示int check=Convert.ToInt32(_idnum)代码>?或者?现在我有一个错误已经有一个与此命令关联的打开的DataReader,必须先关闭。
有一个错误,对象引用未设置为对象的实例。
@LyndonBrozTonelete哦,是的!忘记删除未使用的行rd.Close()代码>请参见更新,如下所示int check=Convert.ToInt32(_idnum)代码>?或者?现在我有一个错误已经有一个与此命令关联的打开的DataReader,必须先关闭。
有一个错误,对象引用未设置为对象的实例。
@LyndonBrozTonelete哦,是的!忘记删除未使用的行rd.Close()代码>见更新我编辑了我的帖子。你能帮我更新一下吗?因为如果同样的事情发生,如果idnum