Freigeben über


Ändern von Daten in einer Datenbank

SQL-Anweisungen, mit denen Daten geändert werden (wie INSERT, UPDATE oder DELETE), geben keine Zeilen zurück. Ähnlich verhält es sich mit vielen gespeicherten Prozeduren, die zwar eine Aktion durchführen, jedoch keine Zeilen zurückgeben. Zum Ausführen von Befehlen, die keine Zeilen zurückgeben, erstellen Sie ein Command-Objekt mit dem entsprechenden SQL-Befehl und einem Connection-Objekt (und beliebigen erforderlichen Parameters-Werten) und verwenden die ExecuteNonQuery-Methode des Command-Objekts.

Die ExecuteNonQuery-Methode gibt eine Ganzzahl zurück, die der Anzahl der Zeilen entspricht, auf die sich die ausgeführte Anweisung oder gespeicherte Prozedur ausgewirkt hat. Wenn mehrere Anweisungen ausgeführt wurden, ist der zurückgegebene Wert die Summe der Datensätze, die von allen ausgeführten Anweisungen beeinflusst wurden.

Im folgenden Codebeispiel wird eine INSERT-Anweisung ausgeführt, um einen Datensatz mit Hilfe der ExecuteNonQuery-Methode in eine Datenbank einzufügen.

Dim nwindConn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;" & _
                                                   "Initial Catalog=northwind")
nwindConn.Open()

Dim insertStr As String = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')"

Dim insertCMD As SqlCommand = New SqlCommand(insertStr, nwindConn)
Dim recordsAffected As Int32 = insertCMD.ExecuteNonQuery()
[C#]
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;" +
                                            "Initial Catalog=northwind");
nwindConn.Open();

string insertStr = "INSERT INTO Customers (CustomerID, CompanyName) Values('NWIND', 'Northwind Traders')";

SqlCommand insertCMD = new SqlCommand(insertStr, nwindConn);
Int32 recordsAffected = insertCMD.ExecuteNonQuery();

Im folgenden Codebeispiel wird die gespeicherte Prozedur ausgeführt, die vom Beispielcode unter Durchführen von Katalogoperationen erstellt wurde. Da von der gespeicherten Prozedur keine Zeilen zurückgegeben werden, wird die ExecuteNonQuery-Methode verwendet. Die gespeicherte Prozedur erhält jedoch einen Eingabeparameter und gibt einen Ausgabeparameter und einen Rückgabewert zurück.

Für das OleDbCommand-Objekt muss der ReturnValue-Parameter zuerst der Parameters-Auflistung hinzugefügt werden.

Dim insertCatCMD As SqlCommand = New SqlCommand("InsertCategory" , nwindConn)
insertCatCMD.CommandType = CommandType.StoredProcedure

Dim workParm As SqlParameter

workParm = insertCatCMD.Parameters.Add("@RowCount", SqlDbType.Int)
workParm.Direction = ParameterDirection.ReturnValue

workParm = insertCatCMD.Parameters.Add("@CategoryName", SqlDbType.NChar, 15)

workParm = insertCatCMD.Parameters.Add("@Identity", SqlDbType.Int)
workParm.Direction = ParameterDirection.Output

insertCatCMD.Parameters("@CategoryName").Value = "New Category"
insertCatCMD.ExecuteNonQuery()

Dim catID As Int32 = CInt(insertCatCMD.Parameters("@Identity").Value)
Dim rowCount As Int32 = CInt(insertCatCMD.Parameters("@RowCount").Value) 
[C#]
SqlCommand insertCatCMD = new SqlCommand("InsertCategory" , nwindConn);
insertCatCMD.CommandType = CommandType.StoredProcedure;

SqlParameter workParm;

workParm = insertCatCMD.Parameters.Add("@RowCount", SqlDbType.Int);
workParm.Direction = ParameterDirection.ReturnValue;

workParm = insertCatCMD.Parameters.Add("@CategoryName", SqlDbType.NChar, 15);

workParm = insertCatCMD.Parameters.Add("@Identity", SqlDbType.Int);
workParm.Direction = ParameterDirection.Output;

insertCatCMD.Parameters["@CategoryName"].Value = "New Category";
insertCatCMD.ExecuteNonQuery();

Int32 catID = (Int32)insertCatCMD.Parameters["@Identity"].Value;
Int32 rowCount = (Int32)insertCatCMD.Parameters["@RowCount"].Value;

Siehe auch

Datenzugriff mit .NET Framework-Datenprovidern | Durchführen von Datenbankoperationen und Ändern von Daten | OleDbCommand-Klasse | OleDbConnection-Klasse | OdbcCommand-Klasse | OdbcConnection-Klasse | SqlCommand-Klasse | SqlConnection-Klasse