错误 'There is already an open DataReader associated with this Command which must be closed first.'

error 'There is already an open DataReader associated with this Command which must be closed first.'

我使用下面的代码,但它给出了句子 icount = cmd.ExecuteNonQuery

的错误
cn.Open()
str = "SELECT [srno],[caste]FROM [SchoolERP].[dbo].[caste] where (caste ='" + (TextBox1.Text) + "')"
cmd = New SqlCommand(str, cn)
dr1 = cmd.ExecuteReader()

If Not dr1.HasRows Then
    str = "INSERT INTO [SchoolERP].[dbo].[caste]([caste])VALUES('" + TextBox1.Text + "')"
    cmd = New SqlCommand(str, cn)
    icount = cmd.ExecuteNonQuery
    MessageBox.Show(icount)

Else
    MsgBox("Record Exists")
    cn.Dispose()
End If
cn.Close()

在您使用完 DataReader 对象后始终尝试调用 Close 方法。

  dr1.Close();

另一个选项是打开 MARS,在您的 连接字符串 中添加 "MultipleActiveResultSets=True;"

我得到了答案...我只在 icount = cmd.ExecuteNonQuery 这句话之前关闭连接,然后再次打开连接...及其工作.. 谢谢迪莎..

您可以在第二次查询之前关闭数据读取器,但最好还是先将其全部放入一个查询中。此外,您真的需要关闭那个可怕的sql注入问题。

试试这个来解决这两个问题:

Dim sql As String = _
  "IF NOT EXISTS    
    (
      SELECT 1 FROM [SchoolERP].[dbo].[caste] where (caste = @caste )   
    )    
    BEGIN
        INSERT INTO [SchoolERP].[dbo].[caste]([caste])VALUES( @caste)
    END"

Using cn As New SqlConnection("connection string here"), _
      cmd As New SqlCommand(sql, cn)

    'Use actual columnn type from the database here
    cmd.Parameters.Add("@caste", SqlDbType.NVarChar, 50).Value = TextBox1.Text

    cn.Open()
    icount = cmd.ExecuteNonQuery()
    MessageBox.Show(icount)
End Using

使用 Try..Catch..Finally...End 尝试这样的事情:

 Try
   cn.Open()
    str = "SELECT [srno],[caste]FROM [SchoolERP].[dbo].[caste] where (caste               ='" + (TextBox1.Text) + "')"
    cmd = New SqlCommand(str, cn)
    dr1 = cmd.ExecuteReader()

    If Not dr1.HasRows Then
       str = "INSERT INTO [SchoolERP].[dbo].[caste]([caste])VALUES('" +     TextBox1.Text + "')"
       cmd = New SqlCommand(str, cn)
       icount = cmd.ExecuteNonQuery
       MessageBox.Show(icount)

   Else
       MsgBox("Record Exists")
       cn.Dispose()
   End If
       cn.Close()
 Catch error As Exception
   ........
 Finally
      dr1.Close
 End Try

试试这个:

Try 
    insert data in combobox 
    cmd.Connection = con 
    cmd.CommandText = "select name from party" 
    dr = cmd.ExecuteReader() 
    cb_ms.Items.Add("---Select---") 
    cb_ms.SelectedIndex = 0 
    While dr.Read() 'get error here.'
         cb_ms.Items.Add(dr("name")) 
    End While

    dr.Close()

Catch ex As Exception
    MessageBox.Show(ex.Message)
End Try