Im folgenden Code verwendet die als Beispiel dienende gespeicherte Prozedur diese Features zum Aktualisieren eines einzelnen Datensatzes in der Beispieldatenbank Nordwind. Sie setzt das Feld für die Telefonnummer auf einen der Prozedur übergebenen Wert, aber nur, wenn kein Fehler auftritt. Falls Probleme den Ablauf stören, wird ein negativer Rückgabewert ausgegeben – falls alles ohne Probleme ausgeführt werden kann, ein positiver.
Rückgabewerte von gespeicherten Prozeduren verwenden
Da die gespeicherte Prozedur Rückgabewerte liefert, kann man diese in seinem .NET-Code verwenden. Das Objekt SqlCommand ermöglicht ein einfaches Hinzufügen von Parametern zum Übergeben an die Prozedur sowie das Speichern von Rückgabewerten. Die Eigenschaft Direction des Parameters wird verwendet, um Rückgabewerte vom Aufruf einer gespeicherten Prozedur zu erhalten. Sie kann zwei Werte annehmen: InputOutput und Output. Im Beispiel wird Output verwendet, um den Statuswert zu erhalten.
Der Code ist eine einfache ASP.NET-Seite, die einen neuen Wert für einen bestimmten Eintrag in der Kundentabelle der Nordwind-Datenbank übergibt. Der ID-Wert wird in einem versteckten Feld gespeichert. Er könnte einfach an das Formular übergeben werden, aber das Feld funktioniert zu Demonstrationszwecken. Der in ein Textfeld eingegebene Wert wird verwendet, um das Feld mit der Telefonnummer in der Datenbanktabelle zu aktualisieren.
Die Parameter werden dem SqlCommand-Objekt hinzugefügt. Sie müssen exakt den Parameterwerten der gespeicherten Prozedur entsprechen. Der Befehl wird mithilfe der ExecuteNonQuery-Methode des SqlCommand-Objekts ausgeführt. Sobald der Befehl ausgeführt wurde, kann der Rückgabewert über diese Parameter abgerufen werden.
Der Code überprüft den Rückgabewert (-1 zeigt ein Problem an), und eine Meldung wird in einem Label-Steuerelement angezeigt. Außerdem wird ein try/catch-Block verwendet, um schwerwiegende Fehler abzufangen, die bei der Interaktion mit der Datenbank auftreten können.
private SqlConnectionconn
= null;
private SqlCommandcmd =
null;
private String connString;
private intrvalue;
public void SubmitChanges() {
connString = „data source=localhost;uid=test;pwd=test;initial catalog=Northwind“;
try {
conn = new SqlConnection(connString);
cmd = new SqlCommand(„sp_UpdateCustomerPhone“, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(„@id“, SqlDbType.NVarChar, 5);
cmd.Parameters[„@id“].Value = lblID.Text;
cmd.Parameters.Add(„@phone“, SqlDbType.NVarChar, 24);
cmd.Parameters[„@phone“].Value = txtPhone.Text;
cmd.Parameters.Add(„@retvalue“,
System.Data.SqlDbType.Int);
cmd.Parameters[„@retvalue“].Direction
= ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
rvalue = (int)cmd.Parameters[„@retvalue“].Value;
if (rvalue == -1) {
lblMessage.Text = „Datenbankfehler während des
Updates.“;
lblMessage.Visible = True;
} else {
lblMessage.Text = „Daten wurden aktualisiert.“; lblMessage.Visible = True;
} conn.Close();
} catch (SqlException ex) {
lblMessage.Text = „Fehler beim Datenbankzugriff: “ + ex.ToString();
} catch (Exception ex) {
lblMessage.Text = „Ausnahme: “ + ex.ToString();
} finally {
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
conn.Dispose();
} }
private void btnUpdatePhone_Click(object sender, System.EventArgs e) {
SubmitChanges();
}
New Number:
ALFKI
Neueste Kommentare
Noch keine Kommentare zu SQL Server: So behandelt man Ausnahmefehler in der Datenschicht
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.