获取用户输入并查看它是否在 Sql 数据库中时出错

问题描述 投票:0回答:1

我正在尝试开发一个简单的上班/下班系统,用户输入他们的详细信息,它会在继续执行下一个功能之前检查他们是否在数据库中。

这是我尝试过的代码。当我运行代码时,它会抛出以下错误“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");
                }
            }
c# sql database reader
1个回答
0
投票

在此行中,

managerSurname
ManagerPhoneNumber
是字符串值,需要在 SQL 查询中用引号引起来。但是,最好使用参数化查询来避免此类问题并防止 SQL 注入。您已经向命令添加了参数,但您没有在查询中使用它们

string query = "SELECT ManagerFirstName FROM ManagerTable WHERE ManagerID=@ManagerID AND ManagerSurname=@ManagerSurname AND ManagerPhoneNumber=@ManagerPhoneNumber";
© www.soinside.com 2019 - 2024. All rights reserved.