2013-09-26 25 views
0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Dim n As Integer = 0 
    str = "select Vote from vote where party='Green'" 
    cmd = New SqlCommand(str, con) 
    con.Open() 
    dr = cmd.ExecuteReader() 
    if dr.HasRows Then 
     dr.Read() 
     n = dr("Vote").ToString() 
     n = n + 1 
     Label8.Text = n.ToString() 
    End If 

    str = "update Vote set vote='" + n.ToString() + "' where party='Green'" 
    cmd = New SqlCommand(str, con) 
    cmd.ExecuteNonQuery() 
    dr.Read() 
    cmd.Dispose() 
    con.Close() 

End Sub 
+0

在末尾处处理'dr'。 –

回答

1

该消息似乎很清楚。你必须要使用另一个操作

MSDN says

虽然正在使用SqlDataReader的连接之前关闭DataReader,关联的SqlConnection是 忙于服务SqlDataReader中,并没有其他操作可能是 除了关闭它之外,在SqlConnection上执行。 的情况就是这种情况,直到SqlDataReader的Close方法被调用。例如, 直到调用关闭之后才能检索输出参数。

.... 
dr.Close() 
str = "update Vote set vote='" + n.ToString() + "' where party='Green'" 
cmd = New SqlCommand(str, con) 
cmd.ExecuteNonQuery() 
' ??? dr.Read() 
cmd.Dispose() 
con.Close() 

顺便说一句,你的整个代码可以使用的ExecuteScalar来检索最后一投的价值和倾销DataReader的

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    Dim n As Integer = 0 
    str = "select Vote from vote where party='Green'" 
    Using cmd = New SqlCommand(str, con) 
     con.Open() 
     Dim n as Integer 
     Dim result = cmd.ExecuteScalar() 
     if result IsNot Nothing Then 
      n = Convert.ToInt32(result) + 1 
     else 
      n = 1 
     End If 
     Label8.Text = n.ToString() 
     str = "update Vote set vote='" + n.ToString() + "' where party='Green'" 
     cmd.CommandText = str 
     cmd.ExecuteNonQuery() 
     con.Close() 
    End Using 
End Sub 

在这种情况下,你使用全局连接对象,这可以简化应该避免。请记住,在需要使用连接时创建,打开,使用和销毁连接总是更好。的SqlClient类可以使用Connection Pooling基础设施,可以帮助很多在管理像

0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

    try 

    Dim n As Integer = 0 

    str = "select Vote from vote where party='Green'" 
    cmd = New SqlCommand(str, con) 
    con.Open() 

    dr.Close() 
    dr = cmd.ExecuteReader() 
    if dr.HasRows Then 
     dr.Read() 
     n = dr("Vote").ToString() 
     n = n + 1 
     Label8.Text = n.ToString() 
    End If 

    str = "update Vote set vote='" + n.ToString() + "' where party='Green'" 
    cmd = New SqlCommand(str, con) 
    cmd.ExecuteNonQuery() 
    dr.Read() 

    Finally 

    cmd.Dispose() 
    con.Close() 

    End Try 

End Sub 
0

添加设为您的连接字符串的多个活动结果的连接宝贵的资源如下图所示

例子:

"Server=Server;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true;" 
相关问题