我想检查给定记录是否在数据库中。它显示错误“无效的列名称”
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();
}
答案 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);