cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007
-
20 mars 2007 à 17:06
Matroks -
26 mars 2007 à 20:06
Bonjour,
je souhaiterai faire cette insertion mais j ai une erreur comme quoi "ExecuteNonQuery: Connection property has not been initialized."
est ce que quelqu un peu me donner une réponse clair, parceque je débute et c'est pas évident encore!!!
Merci 1000 fois
Sabine
Voici mon code:
private
void
button1_Click(
object
sender,
EventArgs
e){
string
insertCmd =
"INSERT INTO user VALUES (seq_user.NEXTVAL,textBox1.Text,textBox2.Text);";
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 21 mars 2007 à 22:00
Oui c'est rageant... En fait j'aurais du installer oracle dès le départ, ca t'aurais évité de perdre du temps :/
Enfin bref, pour revenir un petit peu en arriere où tu demandais "faut-il des cotes ou autre" : le fait d'utiliser les requetes paramétrées te permet de ne plus avoir a t'en soucier ;)
N'hésite pas a revenir poser des questions si besoin est.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 20 mars 2007 à 17:22
Salut,
Ce n'est pas parce que tu appelles DoConnection() que ton Command sait qu'il faut qu'il utilise cette connexion.
Il faut que tu affectes une instance d'OleDbConnection à la propriété Connection de ton OleDbCommand. Il faut donc que ta méthode DoConnection retourne ta connexion et dire a ton OleDbcommand de l'utiliser.
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 20 mars 2007 à 20:24
bonjour,
J'ai une erreur comme quoi au niveau de ExecuteNonQuery, j ai un "invalid character", meme avec le prog en commentaire!
j essaye un peu tout et je fouille sur le net mais la j avous que je bloque!
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 20 mars 2007 à 21:02
Salut,
Plutot que de construire ta requete comme tu le fais, avec des concaténations, tu devrais plutot utiliser des requetes paramétrées (ce qui en plus d'etre plus propre et sécurisé, va certainement résoudre ton probleme)
En gros ca doit donner ca :
string insertCmd = "INSERT INTO user_mpl VALUES (1, ?, ?);";
cmd.parameters.add(textBox1.Text);
cmd.parameters.add(textBox2.Text);
cmd.ExecuteNonQuery();
De plus, il faut absolument que tu fermes ta connexion dans une clause finally (qui s'executera quoiqu'il arrive dans ton code, exception ou non).
try
{
// Ton Code
}
catch{} // Gestion des exception
finally
{
connection.Dispose();
connection = null;
}
Ceci est valable aussi pour les fermeture de fichiers, ...
Mx
MVP C#
Vous n’avez pas trouvé la réponse que vous recherchez ?
ricklekebekoi
Messages postés303Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention24 avril 20095 21 mars 2007 à 02:05
Tiens, un peu hors contexte mais quand même .. a propos du finally ... qu'apporte-t-il de plus ? Je veux dire, les 2 bloc d'instructiosn suivants font la même choses non ?
======================
BLOC A
try
{
// Ton Code
}
catch{} // Gestion des exception
finally
{
connection.Dispose();
connection = null;
}
===================
BLOCB
try
{
// Ton Code
}
catch{} // Gestion des exception
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 21 mars 2007 à 08:52
Héhé, la question avait déja été posée au semblable ;)
Tel que tu l'as écrit, oui la connection sera libérée. Mais dans la réalité, tu ne fais pas un simple catch{ }. Tu peux tout a fait relancer l'exception au code appelant, voire ne pas catcher la bonne exception.
Tu peux aussi avoir un 'return qqchose' dans ton try ou ton catch. Le finally sera appelé, mais pas le code dans ton Bloc B
Simple code de test :
<hr />public
class
Form1 :
Form
{
MessageBox.Show(
"Apres finally");
}
}
<hr />
Tu verras que le "Apres finally" ne montre jamais le bout de son nez. Si tu modifies les throw par des return, idem.
D'ailleurs, pour s'en rendre compte plus facilement, Resharper me met la ligne du "apres finally" en gris.
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 21 mars 2007 à 14:37
Bonjour,
j ai essayé de mettre le paramétrage mais le probleme c est que je créais mon cmd telquel:
OleDbCommand cmd =
new
OleDbCommand(insertCmd, connection);
et donc faire:
string insertCmd = "INSERT INTO user_mpl VALUES (1, ?, ?);";
cmd.parameters.add(textBox1.Text);
cmd.parameters.add(textBox2.Text);
cmd.ExecuteNonQuery();
n est pas possible compte tenu que je passe en parametre 'InsertCmd', donc je peux pas l initialiser avant d ajouter les parametres!!!
enfin je comprends pas vraiment l utilité des paramètres par rapport à ma concaténation, sachant que cést une requete pas compliquée!
donc j en suis toujours au meme point, je sais pas mon erreur du ExecuteNonQuery!!!
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 21 mars 2007 à 17:21
Euhh, bonne question! lol
non je l ai pas quand je tape using "System.Data...."
donc je sais pas trop
Mais je crois aue j en suis à ma 150 facons d insérer et que je réinvente le C#...rire!
merci pour ton aide
Sabine
et la j ai comme erreur "ORA-01036: illegal variable name/number", au niveau de ExecuteNonQuery,
alors que les parametres ont le bon type!!!
est cequ il faut les '?', faut t il des cotes ou autres???
je cherche mais je trouve pleins de version sur le net différentes!!!
cs_Sabine25
Messages postés84Date d'inscriptionjeudi 1 mars 2007StatutMembreDernière intervention22 juin 2007 21 mars 2007 à 20:33
Entre temps j avais trouvé ta solution, mais ca marche toujours pas
toujours "Invalid character"
j ai créé ma table user_mpl comme ceci:
SQL> desc user_mpl
Name Null? Type
----------------------------------------- -------- -----------------------
ID_USER NOT NULL NUMBER(38)
LOGIN VARCHAR2(30)
PASSWORD VARCHAR2(30)
est ce que les types sont appropriés??? oui je pense!!!
emsuite dans le LOAD j ai rien mis, c est ok?
InitializeComponent se fait dans mon constructeur de Formulaire!!
Bref je sais plus!!!
Merci encore
------------------------------------------------------
OracleCommand
cmd conn.CreateCommand();cmd.CommandText
"INSERT INTO user_mpl (p1,p2,p3) VALUES (:parm1,:parm2,:parm3);" +
"COMMIT;";
OracleParameter myParameter1 =
new
OracleParameter(
":parm1",
OracleType.Number);myParameter1.Value = textBox3.Text;
OracleParameter myParameter2 =
new
OracleParameter(
":parm2",
OracleType.VarChar,30);myParameter2.Value = textBox2.Text;
OracleParameter myParameter3 =
new
OracleParameter(
":parm3",
OracleType.VarChar,30);myParameter3.Value = textBox1.Text;