Insert Into en Procedure stockée

Agredel Messages postés 9 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 3 avril 2008 - 14 déc. 2007 à 21:24
Agredel Messages postés 9 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 3 avril 2008 - 19 déc. 2007 à 10:54
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

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
15 déc. 2007 à 08:59
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# 
0
Agredel Messages postés 9 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 3 avril 2008
15 déc. 2007 à 10:38
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.
0
gilletcsteph Messages postés 39 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 22 mai 2008
15 déc. 2007 à 10:44
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+
0
Agredel Messages postés 9 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 3 avril 2008
15 déc. 2007 à 17:06
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
16 déc. 2007 à 10:19
Salut,

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

/*
coq
MVP Visual C#
CoqBlog
*/
0
gilletcsteph Messages postés 39 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 22 mai 2008
17 déc. 2007 à 09:29
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





)








0
Agredel Messages postés 9 Date d'inscription jeudi 15 novembre 2007 Statut Membre Dernière intervention 3 avril 2008
19 déc. 2007 à 10:54
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 !
0
Rejoignez-nous