C# 调用Read()之前访问字段的尝试无效。代码不工作

C# 调用Read()之前访问字段的尝试无效。代码不工作,c#,mysql,c#-4.0,C#,Mysql,C# 4.0,当进入if条件时,在调用Read()之前会出现一个无效的异常尝试来访问字段,而我也在使用d2.Read()。首先,您应该始终使用。这种类型的字符串连接对攻击是开放的 方法逐行读取您的MySqlDataReader。您之所以会出现此错误,可能是因为您无法在不迭代的情况下读取数据读取器字段。你可以像这样使用它 string query2 = "Select * from books where Book_code="; query2 = query2+ "'" + textBox2.Text + "

当进入if条件时,在调用Read()之前会出现一个无效的异常尝试来访问字段,而我也在使用d2.Read()。

首先,您应该始终使用。这种类型的字符串连接对攻击是开放的

方法逐行读取您的
MySqlDataReader
。您之所以会出现此错误,可能是因为您无法在不迭代的情况下读取数据读取器字段。你可以像这样使用它

string query2 = "Select * from books where Book_code=";
query2 = query2+ "'" + textBox2.Text + "'";

cmd = new MySqlCommand(query2, con);
MySqlDataReader d2 = cmd.ExecuteReader();
d2.Read();

if (d2.GetString(0).ToLower() == textBox2.Text.ToLower())
{

}
还可以使用处置
MySqlCommand
MySqlDataReader

while(d2.Read())
{
   if (d2.GetString(0).ToLower() == textBox2.Text.ToLower())
   {
       //
   }
}

您应该检查
读取的结果

using(MySqlConnection con = new MySqlConnection(ConnectionString))
using(MySqlCommand cmd = con.CreateCommand())
{     
    cmd.CommandText = "Select * from books where Book_code = @code";
    cmd.Parameters.AddWithValue("@code", textBox2.Text);
    using(MySqlDataReader d2 = cmd.ExecuteReader())                   
    {
        while(d2.Read())
        {
            if (d2.GetString(0).ToLower() == textBox2.Text.ToLower())
            {
                 //
            }
        }
     }

}

请注意,
DbConnection
DbCommand
DbDataReader
子体正在实现
IDisposable
。您应该通过块来处理它们。

建议使用
参数化查询来避免SQL注入攻击

还要注意
MySqlDataReader.Read()
return
boolean
value。 它将为您逐行读取记录。它应该在读取器到达最后检索的行时执行

if (d2.Read())
{
    if (d2.GetString(0).ToLower() == textBox2.Text.ToLower())
    {
    }
}

学习如何设置问题的格式。您需要使用MySqlCommand参数。您能告诉我为什么需要再次与
textBox2.Text
进行比较吗?我想有时候textbook2.Text会有一些值,查询结果将不会返回任何值,因为可能b没有记录作为textbook2.Text值。所以我比较了一下,如果给定的reslut和教科书中的reslut会做一些比较,然后做一些动作。。Hassansari有时会想textbook2.text会有一些值,而查询结果不会返回任何结果,因为可能b没有记录作为textbook2.text值。所以我比较了一下,如果给定的reslut和教科书中的reslut会做一些比较,然后做一些动作@哈桑尼萨
string query = "Select * from books where Book_code=@BookCode";

cmd = new MySqlCommand(query, con);
cmd.Parameters.AddWithValue("@BookCode", textBox2.Text);

using(MySqlDataReader reader = cmd.ExecuteReader())                   
{
     while(reader.Read())
     {
         if (reader.GetString(0).ToLower() == textBox2.Text.ToLower())
         {

         }
     }
 }