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

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 cdo As New SqlCommand("INSERT INTO dbo.Anreden (Anrede) VALUES ('Firma')", con)
Dim countRows As Integer = cdo.ExecuteNonQuery()
con.Close()

MessageBox.Show(countRows.ToString & " Zeilen wurden eingefügt")

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.

Einer der Konstruktoren des Command-Objektes nimmt ein SQL –Statement entgegen und ein Connection-Objekt entgegen. Wenn es sich um ein „Aktionsabfrage“ Statement handel (INSERT, UPDATE, DELETE, CREATE TABLE etc.) empfiehlt sich die Methode ExecuteNonQuery

ExecuteNonQuery führt den SQL Befehl aus, aber geht davon aus, dass keine Datensätze zurückkommen (daher für SELECT gar nicht zu gebrauchen); daher Non Query=Keine Abfrage.

Stattdessen wird die Anzahl der betroffenen Datensätze in einem Integer-Wert zurückgegeben.

Dim con As SqlConnection = GetConnection()
Dim sql As String
sql = "SELECT ZiffernUndZeichen from dbo.Kommunikation where AdressenID=@AdressenID and IstHauptanschluss=1"
Dim cdo As New SqlCommand(sql, con)
cdo.Parameters.Add(New SqlParameter("@AdressenID", 2))
Dim result As Object = cdo.ExecuteScalar()

If result.Equals(DBNull.Value) Then
    MessageBox.Show("Kein Hauptanschluss")

Else
    MessageBox.Show(result.ToString & " Hauptanschluss")

End If

con.Close()        
      

Soll ein Wert zurückgegeben werden, empfiehlt sich ExecuteScalar. Wie der Name schon sagt, gibt die Methode nur einen Skalarwert zurück. Sie sehen im Beispiel ein SELECT –Statement, dass auch nur einen Wert zurückgibt; Sie können ExecuteScalar() auch mit SQL Statements benutzen, dass mehrere Spalten und Zeilen zurück gibt.

ExecuteScalar() gibt aber immer nur die erste Spalte links der ersten Zeile zurück.

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