Wenn ich mit .NET programmiere, wie kann ich am besten einen SQL-Befehl zum Server senden? Teil 2

Veröffentlicht: 31. Jul 2007

Lösung

Mit dem Command-Objekt von ADO.NET

Zunächst müssen Sie eine Entwicklungsumgebung für .NET besitzen und installieren. Besonders einfach kann dies mit den Express Versionen des Visual Studios, die kostenlos verfügbar sind, realisiert werden. Sie können diese Express Versionen unter http://www.microsoft.com/germany/msdn/vstudio/products/express/default.mspx herunterladen.

Die Beispiele benutzen VB.NET.

Dim con As SqlConnection = GetConnection()
Dim sql As String
sql = "SELECT AnredeID, Anrede FROM dbo.Anreden"
Dim cdo As New SqlCommand(sql, con)

Dim sdr As SqlDataReader = cdo.ExecuteReader()
Do While sdr.Read
    txtResult.Text = txtResult.Text & sdr.GetInt32(0).ToString & " " & sdr.GetString(1) & vbNewLine
Loop
sdr.Close()

Private Function GetConnection() As SqlConnection
    Dim conString As String
    conString = "Server=BEVPC\SQLExpress;database=MSDNSolve;Integrated Security=true"
    Dim con As SqlConnection = Nothing
    Try
        con = New SqlConnection(conString)
        con.Open()
    Catch ex As Exception
        Throw (ex)
    End Try
    Return con
End Function
      

Sie müssen beachten, dass die Connection (die Verbindung) über eine Funktion bereitgestellt wird. GetConnection() sorgt dafür, dass ich immer eine geöffnete Verbindung (wenn ohne Fehler möglich) bekomme.

Die schnellste Möglichkeit, Daten aus dem SQL Server zu beziehen ist es, eine Data Reader zu öffnen (ExecuteReader()). Nach dem Öffnen steht der Reader VOR dem ersten Datensatz. Die Methode Read (sdr.Read) gibt einen boolschen Wert zurück: True, wenn der Reader auf den nächsten Datensatz gehen konnte, false wenn nicht. Do While sdr.Read… Loop geht also durch alle Datensätze bis der Reader nicht mehr zur nächsten Zeile gehen kann (weil es keine mehr gibt). Daher wird auch eine Kopf-gesteuerte Schleife benutzt. Sollte die Abfrage gar keine Zeilen liefern. Schlägt schon das erste Read fehl. Die Funktionen GetX(OridnalzahlderSpalte) gibt also den Datentyp X mit den Werten aus der geforderten Spalte zurück.

GetInt32(2) würde also einen Int32 aus Spalte 3 zurückgeben.

Verbinden und Abrufen von Daten mit ADO.NET
http://msdn2.microsoft.com/de-de/library/ms254937(VS.80).aspx

SqlCommand-Klasse
http://msdn2.microsoft.com/de-de/library/system.data.sqlclient.sqlcommand(VS.80).aspx

Fragen?

Im Blog: http://blogs.sqlserverfaq.de oder an droege@beconstructed.de