it-swarm.com.de

Aufrufen einer gespeicherten Prozedur mit Parameter in c #

Ich kann in meinem Programm ein Löschen, Einfügen und Aktualisieren durchführen, und ich versuche, ein Einfügen durch Aufrufen einer erstellten gespeicherten Prozedur aus meiner Datenbank durchzuführen.

Diesem Knopfeinsatz mache ich gut.

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 Beginn der Schaltfläche, mit der die Prozedur sp_Add_contact Aufgerufen wird, um einen Kontakt hinzuzufügen. 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);
    }
128
FrankSharp

Es ist so ziemlich dasselbe wie das Ausführen einer Abfrage. In Ihrem ursprünglichen Code erstellen Sie ein Befehlsobjekt, setzen es in die Variable cmd und verwenden es niemals. Hier verwenden Sie jedoch das anstelle von da.InsertCommand.

Verwenden Sie auch ein using für alle Einwegobjekte, damit Sie sicher sind, dass sie ordnungsgemäß entsorgt werden:

private void button1_Click(object sender, EventArgs e) {
  using (SqlConnection con = new SqlConnection(dc.Con)) {
    using (SqlCommand cmd = new SqlCommand("sp_Add_contact", con)) {
      cmd.CommandType = CommandType.StoredProcedure;

      cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
      cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;

      con.Open();
      cmd.ExecuteNonQuery();
    }
  }
}
243
Guffa

Sie müssen Parameter hinzufügen, da dies für die Ausführung von SP erforderlich ist

using (SqlConnection con = new SqlConnection(dc.Con))
{
    using (SqlCommand cmd = new SqlCommand("SP_ADD", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@FirstName", txtfirstname);
        cmd.Parameters.AddWithValue("@LastName", txtlastname);
        con.Open();
        cmd.ExecuteNonQuery();
    }            
}
31
Ravi Gadag

cmd.Parameters.Add(String parameterName, Object value) ist jetzt veraltet. Verwenden Sie stattdessen cmd.Parameters.AddWithValue(String parameterName, Object value)

Add (String parameterName, Object value) ist veraltet. Verwenden Sie AddWithValue (String parameterName, Object value)

Es gibt keinen Unterschied in Bezug auf die Funktionalität. Der Grund, warum sie cmd.Parameters.Add(String parameterName, Object value) zugunsten von AddWithValue(String parameterName, Object value) abgelehnt haben, liegt in der besseren Übersichtlichkeit. Hier ist die MSDN-Referenz für das gleiche

private void button1_Click(object sender, EventArgs e) {
  using (SqlConnection con = new SqlConnection(dc.Con)) {
    using (SqlCommand cmd = new SqlCommand("sp_Add_contact", con)) {
      cmd.CommandType = CommandType.StoredProcedure;

      cmd.Parameters.AddWithValue("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
      cmd.Parameters.AddWithValue("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;

      con.Open();
      cmd.ExecuteNonQuery();
    }
  }
}
11
Rahul Nikate

Als Alternative habe ich eine Bibliothek, mit der es einfach ist, mit procs zu arbeiten: https://www.nuget.org/packages/SprocMapper/

SqlServerAccess sqlAccess = new SqlServerAccess("your connection string");
    sqlAccess.Procedure()
         .AddSqlParameter("@FirstName", SqlDbType.VarChar, txtFirstName.Text)
         .AddSqlParameter("@FirstName", SqlDbType.VarChar, txtLastName.Text)
         .ExecuteNonQuery("StoreProcedureName");
3
Greg R Taylor
public void myfunction(){
        try
        {
            sqlcon.Open();
            SqlCommand cmd = new SqlCommand("sp_laba", sqlcon);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.ExecuteNonQuery();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            sqlcon.Close();
        }
}
0
user6916720