Insert Into en Procedure stockée

Signaler
Messages postés
9
Date d'inscription
jeudi 15 novembre 2007
Statut
Membre
Dernière intervention
3 avril 2008
-
Messages postés
9
Date d'inscription
jeudi 15 novembre 2007
Statut
Membre
Dernière intervention
3 avril 2008
-
Bonjour, Je suis débutant en programmation et j'essai de me dépatouiller avec les procédures stockees.

Voilà j'ai un code en C# qui me permet de mettre à jour une Table d'une BD SqlServer 2005.
Je voulais savoir s'il y avait moyen de faire une procédure stockée de ce code.

Le code en C# est le suivant.
double _value Convert.ToDouble(txtMontant.Text);strReq

" Insert into CONTRAT (NoClient, NoCentreI, MontContr, DatContr, EtaContr) values ('" + txtNoClient.Text +
"','" + txtNoCentre.Text +
"','" + _value +
"','" +
DateTime.Today.Year.ToString() +
"/0" +
DateTime.Today.Day.ToString() +
"/" +
DateTime.Today.Month.ToString() +
"','1')";JFDLibrary.dll.

Class1.sqlCom =
new System.Data.SqlClient.
SqlCommand(strReq, JFDLibrary.dll.
Class1.sqlCon);JFDLibrary.dll.

Class1.sqlCom.ExecuteNonQuery();

Dans ma procédure stockée j'essai ceci.
Create

Procedure CreationContrat

(
@Parametre1
int
@Parametre2
int
@Parametre3
decimal
@Parametre4
dateTime
@Paramtre5
int
=
1
)as

Insert

into CONTRAT
(NoClient
, NoCentreI
, MontContr
, DatContr
, EtaContr
)
values
(@Paratre1
,@Parametre2
,@Parametre3
,@Pamametre4
,@Parametre5
)

7 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
44
Salut,

Il faut que tu affectes la propriété CommandType de ton objet SqlCommand avec la valeur CommandType.StoredProcedure, et qu'au lieu de passer la requete dans le constructeur de ce meme objet, tu lui passes en parametre le nom de ta SP.

Je te laisse découvrir le fonctionnement en lisant ceci

Mx
MVP C# 
Messages postés
9
Date d'inscription
jeudi 15 novembre 2007
Statut
Membre
Dernière intervention
3 avril 2008

Merci d'avoir répondu, mais j'ai justement un probleme sur la construction de la procedure stockée. J'obtient toujours le message disant que mes variables @parametre1,@parametre2,@parametre3,@parametre4,@parametre5 ne sont pas déclaré. Ces variables devront par la suite prendre les valeurs contenues dans des textbox.

Je n'ai pas eu de problème jusqu'a maintenant tant qu'il s'agissait de faire des SELECT ( je fais appel a des sp pour celà dans c#). Mais là, je ne vois pas.

Merci de l'aide que je pourrais obtenir.

A.
Messages postés
39
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
22 mai 2008

Salut,

Petite réflexion toute bête, si tu mettais des virgules entre les paramètres de ta procédure stockée ?

Create

Procedure CreationContrat

(
@Parametre1
int,
@Parametre2
int,
@Parametre3
decimal,
@Parametre4
dateTime,
@Paramtre5
int
)

as

set @Parametre5 = 1
Insert

into CONTRAT
(NoClient
, NoCentreI
, MontContr
, DatContr
, EtaContr
)
values

(@Paratre1
,@Parametre2
,@Parametre3
,@Pamametre4
,@Parametre5
)

Sinon, on peut voir le code qui utilise ta procédure stockée ?

A+
Messages postés
9
Date d'inscription
jeudi 15 novembre 2007
Statut
Membre
Dernière intervention
3 avril 2008

J'ai essayé ca ne passe pas. Le probleme est dans la requete SQL d'insertion.
Le message d'erreur est :

Msg 102, Niveau 15, État 1, Procédure CreationContrat, Ligne 4
Syntaxe incorrecte vers '@Parametre2'.
Msg 137, Niveau 15, État 2, Procédure CreationContrat, Ligne 11
La variable scalaire "@Parametre1" doit être déclarée.

Le code csharp que je veux mettre en procédure stockée est le suivant:

double
_value Convert.ToDouble(txtMontant.Text);strReq

" Insert into CONTRAT (NoClient, NoCentreI, MontContr, DatContr, EtaContr) values ('" + txtNoClient.Text +
"','" + txtNoCentre.Text +
"','" + _value +
"','" +
DateTime.Today.Year.ToString() +
"/0" +
DateTime.Today.Day.ToString() +
"/" +
DateTime.Today.Month.ToString() +
"','1')";JFDLibrary.dll.

Class1.sqlCom =
new System.Data.SqlClient.
SqlCommand(strReq, JFDLibrary.dll.
Class1.sqlCon);JFDLibrary.dll.

Class1.sqlCom.ExecuteNonQuery();
Ce code fonctionne bien.

Merci de l'aide en tout cas

A.
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
Salut,

Et quel est le code que tu utilises actuellement pour executer la procédure stockée ?

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
39
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
22 mai 2008

Salut,


J'ai testé ta création de procédure stockée, et si le bout de traitement Sql que tu nous donne est celui que tu essayes d'exécuter, effectivement, ça va pas fonctionner... Regarde bien, il y a des erreurs de saisie au niveau des noms de variables... un traitement que j'ai testé et qui fonctionne :



Create






Procedure
CreationContrat


(




@Parametre1




int
,

@Parametre2




int
,

@Parametre3




decimal
,

@Parametre4




datetime
,

@Parametre5




int

)




as


 


set



@Parametre5

=
1


INSERT






INTO
CONTRAT


(




NoClient




,

NoCentreI




,

MontContr




,

DatContr




,

EtaContr





)




VALUES




(




@Parametre1




,

@Parametre2




,

@Parametre3




,

@Parametre4




,

@Parametre5





)








Messages postés
9
Date d'inscription
jeudi 15 novembre 2007
Statut
Membre
Dernière intervention
3 avril 2008

Finalemant je suis passé par là aussi:


Create Procedure CreationContrat
(
@Parametre1 nvarchar(5),
@Parametre2 nvarchar(3),
@Parametre3 decimal,
@Parametre4 nvarchar (10),
@Parametre5 int
)
as
Insert into CONTRAT (NoClient, NoCentreI, MontContr, DatContr, EtaContr) values (@Parametre1,@Parametre2,@Parametre3,@Parametre4,@Parametre5)

-------------------------------------------------------
J'ai, par ailleur, dans une classe l'appel de la procédure stockée :

public static void execSqlAjout(string strReq, string strParametre1, string strParametre2, double dParametre3, string strParametre4, int iParametre5)
{
sqlCom = new SqlCommand(strReq, JFDLibrary.dll.Class1.sqlCon);
sqlCom.CommandType = System.Data.CommandType.StoredProcedure;
sqlCom.Parameters.AddWithValue("@Parametre1", strParametre1);
sqlCom.Parameters.AddWithValue("@Parametre2", strParametre2);
sqlCom.Parameters.AddWithValue("@Parametre3", dParametre3);
sqlCom.Parameters.AddWithValue("@Parametre4", strParametre4);
sqlCom.Parameters.AddWithValue("@Parametre5", iParametre5);
sqlCom.ExecuteNonQuery();
}

--------------------------------------------------------------------------

De sorte que sur le controle qui doit lancer la création j'ai:

double _value = Convert.ToDouble(txtMontant.Text);
string _strparametre4 = DateTime.Today.Year.ToString() + "/0" + DateTime.Today.Day.ToString() + "/" + DateTime.Today.Month.ToString();

Exemple.execSqlAjout("CreationContrat", txtNoClient.Text, txtNoCentre.Text, _value, _strparametre4, 1);

-------------------------------------------------------------------------------
Et ça marche !