Je peux faire une suppression, une insertion et une mise à jour dans mon programme et j'essaye de faire une insertion par appel d'une procédure stockée créée à partir de ma base de données.
C'est un insert de 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 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);
}
c#
asp.net
sql-server
stored-procedures
ado.net
FrankSharp
la source
la source
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 de commande, vous le placez dans la
cmd
variable et ne l'utilisez jamais. Ici, cependant, vous utiliserez cela à la place deda.InsertCommand
.Utilisez également un
using
pour tous les objets jetables, afin d'être sûr qu'ils sont correctement éliminés:la source
ExecuteReader
ouExecuteScalar
pour l'appeler.ExecuteReader
.Vous devez ajouter des paramètres car ils sont nécessaires pour que le SP s'exécute
la source
parameter.Value = txtfirstname
.cmd.Parameters.Add(String parameterName, Object value)
est désormais obsolète. Utilisez plutôtcmd.Parameters.AddWithValue(String parameterName, Object value)
Add (String parameterName, Object value) est obsolète. Utiliser AddWithValue (String parameterName, Object value)
la source
cmd.Parameters.Add
est obsolète?Add
qui n'est pas non plus obsolète.AddWithValue
n'est pas non plus le meilleur moyen car il déduit le type du paramètre de la valeur du paramètre. Cela conduit souvent à de mauvais plans d'exécution ou à des conversions incorrectes. Il ne valide pas non plus le paramètre en premier lieu (type fe siDatetime
mais vous passez aString
). Vous pouvez voir ici que seulAdd
ce qui prend unObject
deuxième argument est obsolète.AddWithValue
a juste les mêmes fonctionnalitésAdd
qu'avecObject
, mais ce n'est pas la méthode préférée. Les deux doivent déduire le type.Comme alternative, j'ai une bibliothèque qui facilite le travail avec procs: https://www.nuget.org/packages/SprocMapper/
la source
la source
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 jeux d'enregistrements. L'objet de commande dans ADO.NET fournit un certain nombre de méthodes Execute qui peuvent être utilisées pour effectuer les requêtes SQL de différentes manières.
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 fournies si une procédure stockée est écrite pour les accepter. Un exemple de procédure stockée avec acceptation du paramètre d'entrée est donné ci-dessous:
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.
Le code ci-dessus transmet le paramètre de pays à la procédure stockée à partir de l'application C #.
la source