Datareader tror att den är allsmäktig.
Halloj. Har följande kod och jag kan bara inte förstå felmeddelandet:
Har klippt ut den monstruösa Insert strängen så det inte är något fel i den som sådan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ..... Klippa klippa klippa Dim Conn As SqlConnection = New SqlConnection( "Data source=111.222.333.444;Initial Catalog=testdb;UID=sa;PWD=sa" ) Sql = New SqlCommand( "SELECT * FROM tblPosts WHERE MantleCode='" & sRFFAAS & "'" , Conn) rs = Sql.ExecuteReader() rs.Read() If rs.HasRows = False Then Dim Sqls As SqlCommand Sqls = New SqlCommand( "INSERT INTO tblPosts <klippt>" ,Conn) Sqls.ExecuteNonQuery() RFFCUval = "" Sqls.Dispose() End If rs.Close() Conn.Close() Conn.Dispose() |
Av detta får jag ut:
<code>Det finns redan en öppen DataReader som har associerats med detta kommando. Det objektet måste stängas först.</code>
Jag har försökt greppa detta, men det finns INGEN annan referens till Sqls, däremot så har jag inte stängt Conn, men det kan väl inte störa, man måste ju kunna köra flera SQL-kommandon mot samma connection, eller?
//Johannes
Svara
Sv: Datareader tror att den är allsmäktig.
Om du stänger din Datareader då?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Dim Conn As SqlConnection = New SqlConnection( "Data source=111.222.333.444;Initial Catalog=testdb;UID=sa;PWD=sa" ) Sql = New SqlCommand( "SELECT * FROM tblPosts WHERE MantleCode='" & sRFFAAS & "'" , Conn) rs = Sql.ExecuteReader() If Not rs.Read() Then rs.Close() Dim Sqls As SqlCommand Sqls = New SqlCommand( "INSERT INTO tblPosts <klippt>" ,Conn) Sqls.ExecuteNonQuery() RFFCUval = "" Sqls.Dispose() Else rs.Close() End If Conn.Close() Conn.Dispose() |
Sedan rekomenderar jag dig starkt att använda parametrar istället för att slå samman stränga.
Det är en STOR säkerhetsrisk att bygga dina sql frågor. Låt objekten göra det åt dig med parameter frågor.
Svara