Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查ID是否已存储在数据库中?_C#_Winforms_Sql Server 2008 - Fatal编程技术网

C# 如何检查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

我有一段代码,可以将数据插入数据库。我想检查要插入的ID是否已经在数据库中。但若它不在数据库中,那个么应该插入它。但是有一些错误,你能帮我解决吗

    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