Ich kann in meinem Programm löschen, einfügen und aktualisieren und versuche, eine Einfügung durchzuführen, indem ich eine erstellte gespeicherte Prozedur aus meiner Datenbank aufrufe.
Dies ist eine Knopfleiste, die ich gut funktionieren lasse.
private void btnAdd_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(dc.Con);
SqlCommand cmd = new SqlCommand("Command String", con);
da.InsertCommand = new SqlCommand("INSERT INTO tblContacts VALUES (@FirstName, @LastName)", con);
da.InsertCommand.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
da.InsertCommand.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;
con.Open();
da.InsertCommand.ExecuteNonQuery();
con.Close();
dt.Clear();
da.Fill(dt);
}
Dies ist der Anfang der Schaltfläche zum Aufrufen der Prozedur sp_Add_contact
zum Hinzufügen eines Kontakts. Die beiden Parameter für sp_Add_contact(@FirstName,@LastName)
. Ich habe auf Google nach einem guten Beispiel gesucht, aber nichts Interessantes gefunden.
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(dc.Con);
SqlCommand cmd = new SqlCommand("Command String", con);
cmd.CommandType = CommandType.StoredProcedure;
???
con.Open();
da. ???.ExecuteNonQuery();
con.Close();
dt.Clear();
da.Fill(dt);
}
c#
asp.net
sql-server
stored-procedures
ado.net
FrankSharp
quelle
quelle
Antworten:
Es ist so ziemlich das gleiche wie das Ausführen einer Abfrage. In Ihrem ursprünglichen Code erstellen Sie ein Befehlsobjekt, fügen es in die
cmd
Variable ein und verwenden es niemals. Hier verwenden Sie dies jedoch anstelle vonda.InsertCommand
.Verwenden Sie außerdem a
using
für alle Einwegobjekte, damit Sie sicher sind, dass sie ordnungsgemäß entsorgt werden:quelle
ExecuteReader
oderExecuteScalar
um es aufzurufen.ExecuteReader
.Sie müssen Parameter hinzufügen, da dies für die Ausführung des SP erforderlich ist
quelle
parameter.Value = txtfirstname
.cmd.Parameters.Add(String parameterName, Object value)
ist jetzt veraltet. Verwenden Sie stattdessencmd.Parameters.AddWithValue(String parameterName, Object value)
Add (String parameterName, Object value) ist veraltet. Verwenden Sie AddWithValue (String parameterName, Object value)
quelle
cmd.Parameters.Add
veraltet ist?Add
der auch nicht veraltet ist.AddWithValue
Dies ist auch nicht der beste Weg, da der Typ des Parameters vom Parameterwert abgeleitet wird. Dies führt häufig zu schlechten Ausführungsplänen oder falschen Konvertierungen. Es validiert den Parameter auch nicht in erster Linie (zB Typ, wennDatetime
Sie aber a übergebenString
). Sie können hier sehen , dass nurAdd
das , wasObject
als zweites Argument verwendet wird, veraltet ist.AddWithValue
hat genau die gleiche Funktionalität wieAdd
mitObject
, aber es ist nicht der bevorzugte Weg. Beide müssen den Typ ableiten.Als Alternative habe ich eine Bibliothek, die das Arbeiten mit Prozessen erleichtert: https://www.nuget.org/packages/SprocMapper/
quelle
quelle
Die .NET-Datenanbieter bestehen aus einer Reihe von Klassen, mit denen eine Verbindung zu einer Datenquelle hergestellt, Befehle ausgeführt und Datensätze zurückgegeben werden. Das Befehlsobjekt in ADO.NET bietet eine Reihe von Ausführungsmethoden, mit denen die SQL-Abfragen auf verschiedene Arten ausgeführt werden können.
Eine gespeicherte Prozedur ist ein vorkompiliertes ausführbares Objekt, das eine oder mehrere SQL-Anweisungen enthält. In vielen Fällen akzeptieren gespeicherte Prozeduren Eingabeparameter und geben mehrere Werte zurück. Parameterwerte können angegeben werden, wenn eine gespeicherte Prozedur geschrieben wurde, um sie zu akzeptieren. Eine gespeicherte Beispielprozedur mit akzeptierenden Eingabeparametern ist unten angegeben:
Die oben gespeicherte Prozedur akzeptiert einen Ländernamen (@COUNTRY VARCHAR (20)) als Parameter und gibt alle Herausgeber aus dem eingegebenen Land zurück. Sobald der CommandType auf StoredProcedure festgelegt ist, können Sie mithilfe der Parameters-Auflistung Parameter definieren.
Der obige Code, der den Länderparameter von der C # -Anwendung an die gespeicherte Prozedur übergibt.
quelle