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
A
답변
1
메시지가 매우 명확 해 보입니다. 당신은 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()
, 전체 코드는 사용자가 글로벌 연결 개체를 사용하여이이 시나리오에서는 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
를 마지막 투표 값을 검색하는 ExecuteScalar는을 사용하여 덤프 단순화 할 수있다 피해야합니다. 연결을 사용해야 할 때 항상 연결을 만들고 열거 나 사용하고 파괴하는 것이 더 좋습니다. 하는 SqlClient 클래스는 아래와 같이
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
가 연결 문자열로 설정 여러 활성 결과를 추가 연결과 같은 귀중한 자원 관리에 많은 도움이 될 수있는 Connection Pooling 인프라를 사용할 수
예 :
"Server=Server;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true;"
관련 문제
- 1. 이 명령과 관련된 열려있는 DataReader가 이미 있습니다. 먼저 닫아야합니다.
- 2. 이 명령과 관련된 열려있는 DataReader가 이미 있으며 먼저 닫아야합니다.
- 3. EF6 - 이미이 명령과 관련된 열려있는 DataReader가 있습니다. 먼저 닫아야합니다.
- 4. 이 명령과 관련된 DataReader가 이미 열려 있습니다. 먼저 닫아야합니다
- 5. 먼저이 명령과 연결된 열려있는 DataReader가 있습니다. 먼저 닫아야합니다. - WCF
- 6. NHibernate :이 Connection과 연결된 열려있는 DataReader가 이미 있습니다. 먼저 닫아야합니다.
- 7. 먼저 닫아야이 명령과 관련된 열린 DataReader가 이미 있습니다
- 8. 이미 먼저 닫아야이 명령과 관련된 열린 DataReader가 있습니다
- 9. 오류가 이미 먼저 닫아야이 명령과 관련된 열린 DataReader가 있습니다
- 10. 이 명령과 관련된 열린 데이터 판독기가 이미 있습니다. 먼저 닫아야합니다.
- 11. LINQ는이 명령과 관련된 열린 DataReader가 이미 있습니다
- 12. C#/SQL Server error '이 명령과 관련된 열린 DataReader가 이미 있습니다. 먼저 닫아야합니다.'
- 13. 이 연결과 관련된 Open DataReader가 먼저 닫아야합니다.
- 14. cshtml C# 먼저이 연결과 연결된 열려있는 DataReader가 있습니다. 먼저 닫아야합니다.
- 15. 내 Linq 문에서 "이 명령과 관련된 열려있는 DataReader가 먼저 닫아야합니다"문제를 해결하는 방법은 무엇입니까?
- 16. 이미이 명령과 연결된 열려있는 DataReader가 있습니다.
- 17. MySql, Ninject 및 NHibernate - 먼저이 연결과 관련된 열려있는 DataReader가 있습니다. 먼저 닫아야합니다.
- 18. 내 코드에서 나에게 "이 명령과 관련된 열려있는 DataReader가 이미 있습니다."라고 말합니다.
- 19. 이 연결에 이미 열려있는 DataReader가 있습니다.
- 20. LINQ to SQL -이 명령과 관련된 열린 데이터 판독기가 이미 있습니다. 먼저 닫아야합니다.
- 21. EF-Reference.Load() - 이미 열려있는 DataReader가 있습니다
- 22. 이 연결과 관련된 DataReader는 먼저 닫아야합니다.
- 23. C# 4.0 Entity Framework ExecuteStoreQuery : 이미 열려있는 DataReader가 있습니다
- 24. PetaPoco "이미 열려있는 DataReader가"콘솔 응용 프로그램에서
- 25. 이미 유효하지 않은 데이터로 체킹하고있을 때이 명령과 연결된 열려있는 DataReader
- 26. 이미 열려있는 datareader가 있습니다 - Mysql - C# 연결을 처분하십시오
- 27. ADO.Net DataReader 오류 : 이미 Open DataReader가 열려 있습니다.
- 28. 이미이 Connection과 연결된 열린 DataReader가 있습니다.이 연결은 먼저 C#
- 29. LINQ를 사용할 때 DataReader가 이미 열려 있습니다.
- 30. System.InvalidOperationException :이 Command와 연결된 열려있는 DataReader가 먼저 닫혀 야합니다.
끝에 'dr'도 표시하십시오. –