Benutzer mit den meisten Antworten
ExecuteReader: Connection-Eigenschaft wurde nicht initialisiert.

Frage
-
Hallo an Alle,
hab da mal eine kleines Problem.
Greife auf eine DB per SQL 2005 Express zu. Soweit so gut. Verbindung zum SQL / DB funzt. Beim Debuggen wird mir die obengenannte Fehlermeldung ausgegeben. Ich weis nicht weiter. Was ist falsch oder übersehe ich?
Würde mich über Tips freuen.
Hier der Code:
Imports System.Data
Imports System.Data.SqlClient
Public Class frmHaupt
Dim con As New SqlConnection
Dim cmd As New SqlCommand
Dim reader As SqlDataReader
Dim strHelp As String
Private Sub ConnectToSQL()
Dim SN As Integer
Try
con.ConnectionString = "Data Source=ZZ1\SQLEXPRESS;Initial Catalog=QTB;User ID=QMS;Password=QMS9000"
cmd.CommandText = "select * from dbo.T_QS_Service"
con.Open()
reader = cmd.ExecuteReader()
reader.Read()
SN = CInt(reader("SerienNr"))
Catch ex As Exception
MessageBox.Show("Error while connecting to SQL Server. " & ex.Message)
strHelp = ex.Message
Finally
con.Close() 'Whether there is error or not. Close the connection.
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ConnectToSQL()
End Sub
End Class
Antworten
-
Hi,
ändere die Deklarationszeile von "cmd" mal wie folgt:
Dim cmd As SqlCommand
Innerhalb der Methode ConnectToSql erstellst Du die Instanz dann wie folgt:
cmd = New SqlCommand( "<SqlStatement>", con )
Alternativ kannst Du auch vor der Zeile mit cmd.CommandText = ... folgendes einfügen:
cmd.Connection = con
Bei Finally bitte auch con.Dispose() aufrufen, ggfs. auch cmd.Dispose() (Merke: Alles, was eine Dispose Methode hat, sollte nach Verwendung auch explizit "disposed" werden)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 20. November 2011 12:07
- Als Antwort markiert Thorsten Dörfler Sonntag, 20. November 2011 12:22
-
Hallo Parsecccs,eigentlich hätte ich bei deinem Code eine NullReferenceException erwartet. Wo erzeugst du denn dein Command? Wie es aussieht hast du relevanten Code nicht gepostet.
Vermutlich erzeugst du das Command Objekte mittels des new Operators. Optimalerweise erzeugt man ein Command aus der Connection, was übrigens dein Problem automatisch löst, da dem Command automatisch die (erzeugendende) Connection hizugefügt wird. Verwende einfach con.CreateCommand() und schon bist du deinen Fehler los, und dein Command ist gleich noch Datenbankprovider unabhängig :)
Wie Stefan bereits richtigerweise angemerkt hat, solltest du die Connection, das Command, und den DataReader mittels Dispose() entsorgen, sonst erzeugst du dir Memleaks! Am besten, du verwendest dafür die Using Anweisung (hier eine Beispie mit einem DataReader):
Using rdr As SqlDataReader = cmd.ExecuteReader() While rdr.Read() Console.WriteLine(rdr(0)) End While End Using
Genau das gleich solltest du mit dem Connection- und dem Commandobjekt machen ;)
Somit wird dein DataReader automatisch disposed, wenn der Using-Scope verlassen wird, sogar dann, wenn innerhalb des Using-Scopes eine Exception auftritt. (Ist somit quasi ein Try Finally konstrukt).Ich hoffe ich konnte dir weiterhelfen...
Viele Grüße
Holger M. Rößler
Kaum macht man es richtig, schon funktioniert es
- Bearbeitet Holger M. Rößler Sonntag, 20. November 2011 08:47
- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 20. November 2011 12:07
- Als Antwort markiert Thorsten Dörfler Sonntag, 20. November 2011 12:22
Alle Antworten
-
Hi,
ändere die Deklarationszeile von "cmd" mal wie folgt:
Dim cmd As SqlCommand
Innerhalb der Methode ConnectToSql erstellst Du die Instanz dann wie folgt:
cmd = New SqlCommand( "<SqlStatement>", con )
Alternativ kannst Du auch vor der Zeile mit cmd.CommandText = ... folgendes einfügen:
cmd.Connection = con
Bei Finally bitte auch con.Dispose() aufrufen, ggfs. auch cmd.Dispose() (Merke: Alles, was eine Dispose Methode hat, sollte nach Verwendung auch explizit "disposed" werden)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 20. November 2011 12:07
- Als Antwort markiert Thorsten Dörfler Sonntag, 20. November 2011 12:22
-
Hallo Parsecccs,eigentlich hätte ich bei deinem Code eine NullReferenceException erwartet. Wo erzeugst du denn dein Command? Wie es aussieht hast du relevanten Code nicht gepostet.
Vermutlich erzeugst du das Command Objekte mittels des new Operators. Optimalerweise erzeugt man ein Command aus der Connection, was übrigens dein Problem automatisch löst, da dem Command automatisch die (erzeugendende) Connection hizugefügt wird. Verwende einfach con.CreateCommand() und schon bist du deinen Fehler los, und dein Command ist gleich noch Datenbankprovider unabhängig :)
Wie Stefan bereits richtigerweise angemerkt hat, solltest du die Connection, das Command, und den DataReader mittels Dispose() entsorgen, sonst erzeugst du dir Memleaks! Am besten, du verwendest dafür die Using Anweisung (hier eine Beispie mit einem DataReader):
Using rdr As SqlDataReader = cmd.ExecuteReader() While rdr.Read() Console.WriteLine(rdr(0)) End While End Using
Genau das gleich solltest du mit dem Connection- und dem Commandobjekt machen ;)
Somit wird dein DataReader automatisch disposed, wenn der Using-Scope verlassen wird, sogar dann, wenn innerhalb des Using-Scopes eine Exception auftritt. (Ist somit quasi ein Try Finally konstrukt).Ich hoffe ich konnte dir weiterhelfen...
Viele Grüße
Holger M. Rößler
Kaum macht man es richtig, schon funktioniert es
- Bearbeitet Holger M. Rößler Sonntag, 20. November 2011 08:47
- Als Antwort vorgeschlagen Stefan FalzModerator Sonntag, 20. November 2011 12:07
- Als Antwort markiert Thorsten Dörfler Sonntag, 20. November 2011 12:22