我想检查给定记录是否在数据库中

时间:2015-07-23 05:16:48

标签: c# sql-server database

我想检查给定记录是否在数据库中。它显示错误“无效的列名称”

 private void SaveButton_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection("Data Source=PC308433;Initial Catalog=SampleDatabase;Persist Security Info=True;User ID=sa;Password=adm23");

        conn.Open();

        SqlCommand sc = new SqlCommand("select USERNAME from QuizTable where USERNAME=" + UserNameTextbox.Text + "", conn);
        string result =Convert.ToString(sc.ExecuteNonQuery());//I dont know to store the result of query here.Pls help me
        if (result == UserNameTextbox.Text)
            MessageBox.Show("Welcome");
        else
            MessageBox.Show("Please register");

        conn.Close();


    }

6 个答案:

答案 0 :(得分:1)

您必须使用ExecuteReader()ExecuteNonQuery()仅用于插入,更新和删除语句,并使用Contructor将CommandBehaviour枚举与SingleRow一起使用,因为它每个用户名应该有一行:

SqlDataReader rdr = sc.ExecuteReader(CommandBehavior.SingleRow);
if(rdr.Read() && (rdr["USERNAME"].ToString() == UserNameTextbox.Text))
            MessageBox.Show("Welcome");
}

旁注:

您应该使用 parameterized queries ,目前您可以使用 sql injection

答案 1 :(得分:1)

试试这个,

private void SaveButton_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection("Data Source=PC308433;Initial Catalog=SampleDatabase;Persist Security Info=True;User ID=sa;Password=adm23");

    conn.Open();

    SqlCommand sc = new SqlCommand("select USERNAME from QuizTable where USERNAME=@USERNAME", conn);
    sc.Parameters.AddWithValue(@USERNAME,'"+UserNameTextbox.Text+"');
    SqlDataReader dr = sc.ExecuteReader();//Use this line
    if (dr.HasRows)
        MessageBox.Show("Welcome");
    else
        MessageBox.Show("Please register");

    conn.Close();


}

答案 2 :(得分:1)

首先,请确保 QuizTable 中包含 USERNAME 列。

这是一个完整的代码片段 -

  

注意:您的 USERNAME 列可能会与sql server保留字产生冲突。您应该更改它,即USER_NAME或LOGINNAME。

try
{
   string userName = UserNameTextbox.Text.Trim();
   using (SqlConnection conn = new SqlConnection("Your Conn String"))
   {
       string sql="select USERNAME from QuizTable where USERNAME=@USERNAME";
       using (SqlCommand command = new SqlCommand(sql,conn))
       {
          command.Parameters.AddWithValue("@USERNAME", userName );

          connection.Open();
          Object IsFound = command.ExecuteScalar();
          connection.Close();


          if (IsFound == null)
          {
              //if not found
          }
          else
          {
              //if found
          }
       }
    }
}
catch (Exception Ex)
{
    MessageBox.Show(Ex.Message);
}

答案 3 :(得分:0)

您需要在username参数的值周围加上引号。

另外,不要使用字符串连接来构建sql语句。你对注射攻击持开放态度。

答案 4 :(得分:0)

你可以尝试this,因为你使用了executenonquery(),在这里我认为使用ExecuteReader()

答案 5 :(得分:0)

首先,您需要检查用户名'在表中然后 Plesae尝试这个....

SqlCommand sc = new SqlCommand("select USERNAME from QuizTable where USERNAME='" + UserNameTextbox.Text + "'", conn);