我正在尝试开发一个简单的上班/下班系统,用户输入他们的详细信息,它会在继续执行下一个功能之前检查他们是否在数据库中。
这是我尝试过的代码。当我运行代码时,它会抛出以下错误“Microsoft.Data.SqlClient.SqlException:'无效的列名'Bobbo'。'”但是,当我从代码中取出 ManagerSurname 时,它会按预期工作。
SqlConnection connection = new SqlConnection(ConnectionString);
connection.Open();
int ManagerID = int.Parse(tbx_MngNumber.Text);
string managerSurname = tbxMangSurname.Text;
string ManagerPhoneNumber = tbxNumber.Text;
string query = $"SELECT ManagerFirstName FROM ManagerTable WHERE ManagerID={ManagerID} AND ManagerSurname={managerSurname} AND ManagerPhoneNumber={ManagerPhoneNumber}";
using (SqlCommand cmd = new SqlCommand(query, connection))
{
cmd.Parameters.AddWithValue("@ManagerSurname", managerSurname);
cmd.Parameters.AddWithValue("@ManagerID", ManagerID);
cmd.Parameters.AddWithValue("@ManagerPhoneNumber", ManagerPhoneNumber);
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
MessageBox.Show("manager");
}
else
{
MessageBox.Show("no");
}
}
在此行中,
managerSurname
和ManagerPhoneNumber
是字符串值,需要在 SQL 查询中用引号引起来。但是,最好使用参数化查询来避免此类问题并防止 SQL 注入。您已经向命令添加了参数,但您没有在查询中使用它们
string query = "SELECT ManagerFirstName FROM ManagerTable WHERE ManagerID=@ManagerID AND ManagerSurname=@ManagerSurname AND ManagerPhoneNumber=@ManagerPhoneNumber";