我正在尝试从SQL填充网格视图中的数据。当我单击按钮并在网格视图中填充数据时,我获得了用户访问权限。但我得到一个错误,已经有一个与此命令关联的开放数据读取器必须先关闭。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
If ComboBox2.Text = "-----select-----" Then
MsgBox("Please Select Region and Site ID", MsgBoxStyle.Critical, "failure")
Else
Button3.Show()
Button4.Show()
Button5.Show()
connection_open()
qry = "select * from LOG_ACCESS where ID='" & UCase(Environ$("Username")) & "' "
cmd1 = New SqlCommand(qry, cnn)
dr = cmd1.ExecuteReader
If dr.Read = True Then
MsgBox("login successful", MsgBoxStyle.Information, "login")
qry1 = "select * from SITE_DETAILS where Region = '" + ComboBox1.SelectedItem.ToString + "' And Site_ID = '" + ComboBox2.SelectedItem.ToString + "'"
adp = New SqlDataAdapter(qry1, cnn)
dr.Close()
adp.Fill(ds, "SITE_DETAILS")
'dr.Close()
DataGridView1.DataSource = ds
DataGridView1.DataMember = ds.Tables(0).ToString
DataGridView1.Hide()
'Me.Hide()
'dr.Close()
connection_close()
Else
MsgBox("Please Contact Administrator", MsgBoxStyle.Critical, "failure")
dr.Close()
connection_close()
End If
End If
dr.Close()
connection_close()
Catch ex As SqlException
MsgBox(ex.Message, MsgBoxStyle.Critical, "SqlError")
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
答案 0 :(得分:0)
在您的连接字符串集MARS =“true”
尝试使用此代替dr = cmd1.ExecuteReader
dr = comm.ExecuteReader(CommandBehavior.CloseConnection)
答案 1 :(得分:0)
我想知道问题是不是你的open_connection方法发生了什么。
通常,当我看到数据网格已填满时,它位于using语句的上下文中...(使用sql SQLConnection ...)您是否尝试过这种方法?
这样你的连接只能在使用范围的大括号中打开...一旦块完成,它将被自动处理,因此你不需要在if逻辑中使用所有那些.close。 / p>
以下是您可能会发现有用的链接: http://www.canofcode.co.uk/software/c-sharp-using-statement/