如何检查SQL数据库中是否已存在该记录?

时间:2015-06-17 06:58:04

标签: c# sql sql-server

我正在尝试检查数据库列中是否存在该值。我知道这个问题好几次,但没有一个能解决我的问题。我在很多方面尝试过它。无论如何我的下面的代码通过一个例外;

  

“发生了'System.ArgumentException'类型的未处理异常   System.Data.dll附加信息:不存在映射   对象类型System.Windows.Forms.TextBox到已知的托管提供程序   本地类型。“

这个问题解决了异常,这是一个错误。但它仍然没有工作,虽然记录在数据库中,但它并没有限制我。

任何人都可以告诉我我的代码有什么问题,代码是;

private void btn_Register_Click(object sender, EventArgs e)
    {
        lbl_Available.Visible = false;
        lbl_Empty.Visible = false;
        bool hasValue1 =  string.IsNullOrWhiteSpace(txt_PinCode.Text);
        bool hasValue2 =  string.IsNullOrWhiteSpace(txt_Name.Text);
        if (!hasValue1 && !hasValue2)
        {
            string pincode = txt_PinCode.Text;
            if (UserExists(pincode))
            {
               lbl_Available.Visible = true;
               return;
            }
            else
            {
                this.Hide();
                RegCluePoint frm = new RegCluePoint();
                frm.lbl_PinCode.Text = txt_PinCode.Text;
                frm.lbl_Name.Text = txt_Name.Text;
                frm.Show();
            }                    
        }
        else
        {
            lbl_Empty.Visible = true;
        }
    }
private bool UserExists(string pincode)
    {
        //pincode = txt_PinCode.Text
        //SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandText = "SELECT PINCODE from UserInput where PINCODE = '@pincode'";
        cmd.Parameters.AddWithValue("PINCODE", pincode);
        if (conn.State != ConnectionState.Open)
        conn.Open();

        string pinString = (string)cmd.ExecuteScalar();
        conn.Close();

        return (pinString != null);
    } 

4 个答案:

答案 0 :(得分:3)

您要在此行txt_PinCode

中发送txt_PinCode.Text,一个文本框对象而不是字符串(cmd.Parameters.AddWithValue("PINCODE", txt_PinCode);

答案 1 :(得分:2)

您没有传递传递给方法的pincode,而是传递文本框本身(甚至不是文本框的值)。

private bool UserExists(string pincode)
{
    //pincode = txt_PinCode.Text
    //SqlCommand cmd = new SqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = "SELECT PINCODE from UserInput where PINCODE = '@pincode'";
    cmd.Parameters.AddWithValue("@pincode", pincode);
    if (conn.State != ConnectionState.Open)
    conn.Open();

    //Execute scalar returns the first column of the first row in the result set
    string pinString = (string)cmd.ExecuteScalar();
    conn.Close();

    return (pinString != null);
} 

答案 2 :(得分:1)

您正在尝试传递文本框本身,但不是文本。更改代码

cmd.Connection = conn;
cmd.CommandText = "SELECT PINCODE from UserInput where PINCODE = '@pincode'";
cmd.Parameters.AddWithValue("PINCODE", txt_PinCode.Text);

答案 3 :(得分:1)

在这行代码中,您将发送文本框对象而不是文本。

cmd.Parameters.AddWithValue("PINCODE", txt_PinCode);

将其更改为:

cmd.Parameters.AddWithValue("PINCODE", txt_PinCode.Text);