Appelez une procédure stockée avec le paramètre en c#
Je peux faire un delete, insert et update dans mon programme et j'essaie de faire un insert en appelant une procédure stockée créée à partir de ma base de données.
Ce bouton Insérer 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 pour 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);
}
7 réponses
C'est à peu près la même chose que d'exécuter une requête. Dans votre code d'origine, vous créez un objet command, le mettez dans la variable cmd
et ne l'utilisez jamais. Ici, cependant, vous utiliserez cela au lieu de da.InsertCommand
.
Aussi, utilisez un using
pour tous les objets jetables, afin que vous soyez sûr qu'ils sont disposés correctement:
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();
}
}
}
Vous devez ajouter des paramètres car il est nécessaire pour que le SP 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();
}
}
cmd.Parameters.Add(String parameterName, Object value)
est obsolète maintenant. Utilisez plutôtcmd.Parameters.AddWithValue(String parameterName, Object value)
Il n'y a pas de différence en termes de fonctionnalité. La raison pour laquelle ils désapprouvé les
cmd.Parameters.Add(String parameterName, Object value)
en faveur deAddWithValue(String parameterName, Object value)
est de donner plus de clarté. Voici la référence MSDN pour le même
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();
}
}
}
Comme 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");
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();
}
}
L'ajout des paramètres séparément m'a donné des problèmes, donc je l'ai fait et cela a très bien fonctionné:
string SqlQ = string.Format("exec sp_Add_contact '{0}', '{1}'", txtFirstName.Text, txtLastName.Text);
using (SqlConnection con = new SqlConnection(dc.Con)) {
using (SqlCommand cmd = new SqlCommand("sp_Add_contact", con)) {
con.Open();
cmd.ExecuteNonQuery();
}
}
Les fournisseurs de données. net se composent d'un certain nombre de classes utilisées pour se connecter à une source de données, exécuter des commandes et renvoyer des ensembles d'enregistrements. L'objet de commande dans ADO.NET fournit un certain nombre de méthodes D'exécution qui peuvent être utilisées pour effectuer les requêtes SQL dans une variété de modes.
Une procédure stockée est un objet exécutable pré-compilé qui contient une ou plusieurs instructions SQL. Dans de nombreux cas, les procédures stockées acceptent les paramètres d'entrée et renvoient plusieurs valeurs . Les valeurs de paramètre peuvent être fourni si une procédure stockée est écrite pour les accepter. Un exemple de procédure stockée avec un paramètre d'entrée accepté est donné ci-dessous:
CREATE PROCEDURE SPCOUNTRY
@COUNTRY VARCHAR(20)
AS
SELECT PUB_NAME FROM publishers WHERE COUNTRY = @COUNTRY
GO
La procédure stockée ci-dessus accepte un nom de pays (@COUNTRY VARCHAR(20)) comme paramètre et renvoie tous les éditeurs du pays d'entrée. Une fois que CommandType est défini sur StoredProcedure, vous pouvez utiliser la collection Parameters pour définir des paramètres.
command.CommandType = CommandType.StoredProcedure;
param = new SqlParameter("@COUNTRY", "Germany");
param.Direction = ParameterDirection.Input;
param.DbType = DbType.String;
command.Parameters.Add(param);
Le code ci-dessus passant le paramètre country à la procédure stockée à partir de C# application.
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string connetionString = null;
SqlConnection connection ;
SqlDataAdapter adapter ;
SqlCommand command = new SqlCommand();
SqlParameter param ;
DataSet ds = new DataSet();
int i = 0;
connetionString = "Data Source=servername;Initial Catalog=PUBS;User ID=sa;Password=yourpassword";
connection = new SqlConnection(connetionString);
connection.Open();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "SPCOUNTRY";
param = new SqlParameter("@COUNTRY", "Germany");
param.Direction = ParameterDirection.Input;
param.DbType = DbType.String;
command.Parameters.Add(param);
adapter = new SqlDataAdapter(command);
adapter.Fill(ds);
for (i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
{
MessageBox.Show (ds.Tables[0].Rows[i][0].ToString ());
}
connection.Close();
}
}
}