web-dev-qa-db-fra.com

Appeler une procédure stockée avec le paramètre en c #

Je peux effectuer une suppression, une insertion et une mise à jour dans mon programme et j'essaie de faire une insertion en appelant une procédure stockée créée à partir de ma base de données.

C'est un bouton que je fais bien fonctionner.

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);
    } 

C'est le début du bouton permettant d'appeler la procédure nommée sp_Add_contact pour ajouter un contact. Les deux paramètres pour sp_Add_contact(@FirstName,@LastName). J'ai cherché sur google un bon exemple mais je n'ai rien trouvé d'intéressant.

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

C'est à peu près la même chose que de lancer une requête. Dans votre code d'origine, vous créez un objet de commande, vous le placez dans la variable cmd et vous ne l'utilisez jamais. Ici, cependant, vous utiliserez cela à la place de da.InsertCommand.

Utilisez également un using pour tous les objets jetables, afin de vous assurer qu'ils sont correctement éliminés:

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

Vous devez ajouter des paramètres car il est nécessaire que le SP s'exécute

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) est obsolète maintenant. Utilisez plutôt cmd.Parameters.AddWithValue(String parameterName, Object value)

Add (String parameterName, Object value) est obsolète. Utilisez AddWithValue (String parameterName, Object value)

Il n'y a pas de différence en termes de fonctionnalité. La raison pour laquelle ils ont déconseillé d'utiliser cmd.Parameters.Add(String parameterName, Object value) au profit de AddWithValue(String parameterName, Object value) est plus claire. Voici la référence MSDN pour la même chose

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

En guise d'alternative, j'ai une bibliothèque qui facilite le travail avec procs: 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