我的选择语句有什么问题

本文关键字:什么 问题 语句 选择 我的 | 更新日期: 2023-09-27 18:31:00

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connecton1"].ConnectionString);
conn.Open();
SqlCommand check = new SqlCommand("SELECT Location FROM Items WHERE Serial="+Convert.ToInt32(Serialtxt.Text).ToString()+"", conn);
string checker = check.ExecuteReader();

我正在尝试在我的数据库中查找一段数据并将其分配给一个变量。我得到的错误是

无法将类型"System.Data.SqlClient.SqlDataReader"隐式转换为字符串

我做错了什么?

我的选择语句有什么问题

你必须改用ExecuteScalar

string checker = (string)check.ExecuteScalar();

您还应该使用 sql 参数来防止 sql 注入。

SqlCommand check = new SqlCommand("SELECT Location FROM Items WHERE Serial = @Serial", conn);
check.Parameters.AddWithValue("@Serial", Convert.ToInt32(Serialtxt.Text));

如果您希望每个序列多行,您可以使用ExecuteReader并填充List<string>

List<string> allLocations = new List<string>();
using(SqlDataReader rd = check.ExecuteReader())
while(rd.Read())
    allLocations.Add(rd.GetString(0));

检查器类型从string更改为SqlDataReader

然后你可以做

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connecton1"].ConnectionString);
conn.Open();
SqlCommand check = new SqlCommand("SELECT Location FROM Items WHERE Serial           ="+Convert.ToInt32(Serialtxt.Text).ToString()+"", conn);
SqlDataReader checker = check.ExecuteReader();
    while (checker.Read())
    {
           if (checker[0] != null)
           {
              //some logic with the result
           }
    }