Requete sql [Résolu]

cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention - 27 nov. 2007 à 22:54 - Dernière réponse : cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention
- 28 nov. 2007 à 12:00
Bonsoir,
j ai un probleme avec une requete INSERT INTO vers Access voici le code :

OleDbConnection maconnect = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source='G:\\Mes applications\\VideoTech\\bdd users\\bdd_users1.mdb';Jet OLEDB:Database Password=gtklink");
try
{
maconnect.Open();
}
catch (Exception xex)
{
Console.WriteLine("Erreur");
maconnect.Close();
return;
}

string strsqlAddUser = "INSERT INTO Users (nick,password,nom,prenom,id_rang) VALUES(monnick,monpassword,monmorandi,monprenom,2)";
OleDbCommand sqlAddUser = new OleDbCommand(strsqlAddUser, maconnect);
sqlAddUser.ExecuteNonQuery();

L'erreur : "Erreur de syntaxe dans l'instruction INSERT INTO."
L'erreur est peut etre tout simple mais je ne vois pas et j ai essayer
avec et sont "'..
si qqun pouvait m aider ca serai sympas.
Afficher la suite 

13 réponses

Répondre au sujet
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 28 nov. 2007 à 11:26
+3
Utile
Hello,

Je crois que j'ai trouvé !!!

Apparemment, password est un mot reservé par OleDb. En mettant
INSERT INTO Users(nick,[password],nom,prenom,id_rang)
ça devrait marcher

Fait aussi attention avec le copy/paste :

                        OleDbParameter paramIdR = new OleDbParameter("@idRang", SqlDbType.Int); 
             paramIdR .Value = 2; // et pas paramNick

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SharpMao
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 28 nov. 2007 à 08:37
0
Utile
Hello,

Premièrement, si monnick,monpassword,monmorandi,monprenom sont les valeurs que tu veux insérer et pas des variables :
string strsqlAddUser = "INSERT INTO Users (nick,password,nom,prenom,id_rang) VALUES('monnick','monpassword','monmorandi','monprenom',2)";
Si ça ne marche pas, essaie de prendre cette requête et de l'éxécuter directement dans Access.

Par contre, si monnick,monpassword,monmorandi,monprenom sont des variables de ton programme, je te conseil l'utilisation de requêtes paramétrées.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention - 28 nov. 2007 à 08:39
0
Utile
ok je vais essayer
Commenter la réponse de cs_elnk
cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention - 28 nov. 2007 à 09:13
0
Utile
J ai essyer d executer cette requete sous access directement :

INSERT INTO Users (nick,password,nom,prenom,id_rang) VALUES(monnick,monpassword,monmorandi,monprenom,2);

mais elle ne me rempli pas les champs nick password nom prenom id_rang
avec ceux des values, ca m affiche une boite de dialogue avec comme text
mes values et je dois saisir leur donnée ensuite ca range les données
dans les champs...

je ne comprends pas trop :/
Commenter la réponse de cs_elnk
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 28 nov. 2007 à 09:29
0
Utile
C'est parce qu'il faut entourer tes valeurs chaînes de charactères par le caratère '

INSERT INTO Users (nick,password,nom,prenom,id_rang) VALUES('monnick','monpassword','monmorandi','monprenom',2)

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention - 28 nov. 2007 à 09:50
0
Utile
j ai ressayer avec les parametres :

OleDbConnection maconnect = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source='G:\\Mes applications\\VideoTech\\bdd users\\bdd_users1.mdb';Jet OLEDB:Database Password=password");
try
{
maconnect.Open();
}
catch (Exception xex)
{
MessageBox.Show("Error");
maconnect.Close();
return;
}

//string strsqlAddUser = "INSERT INTO Users(nick,[password],nom,prenom,id_rang) VALUES(monnick,monpassword,monmorandi,monprenom,2)";
//OleDbCommand sqlAddUser = new OleDbCommand(strsqlAddUser, maconnect);
//sqlAddUser.ExecuteNonQuery();

SqlParameter paramNick = new SqlParameter("@Nick", SqlDbType.VarChar);
paramNick.Value = "MonNick";
SqlParameter paramNom = new SqlParameter("@Nom", SqlDbType.VarChar);
paramNom.Value = "MonNom";
SqlParameter paramPass = new SqlParameter("@Pass", SqlDbType.VarChar);
paramPass.Value = "MonPass";
SqlParameter paramPren = new SqlParameter("@Pren", SqlDbType.VarChar);
paramPren.Value = "MonPrenom";
SqlParameter paramIdR = new SqlParameter("@idRang", SqlDbType.Int);
paramNick.Value = 2;

string Sql = string.Format("INSERT INTO Users(nick,password,nom,prenom,id_rang) " +
"VALUES({0},{1},{2},{3},{4})", paramNick.ParameterName, paramPass.ParameterName, paramNom.ParameterName, paramPren.ParameterName, paramIdR.ParameterName);
OleDbCommand cmd = new OleDbCommand(Sql.ToString(),maconnect);
cmd.Parameters.Add(paramNick);
cmd.Parameters.Add(paramPass);
cmd.Parameters.Add(paramNom);
cmd.Parameters.Add(paramPren);
cmd.Parameters.Add(paramIdR);

cmd.ExecuteNonQuery();

mais j ai pas plus de succes il me surligne :
cmd.Parameters.Add(paramNick);

et affiche cette erreur :

OleDbParameterCollection accepte uniquement des objets de type OleDbParameter non null, et non des objets SqlParameter.
Commenter la réponse de cs_elnk
cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention - 28 nov. 2007 à 09:58
0
Utile
On me dit, que pour ma requete d'origine, c esta dire sans le parametres,
qu il faut que je fasse un AddNew avant et un Update apres mais je ne
vois pas trop ce ke je dois representer avec ca!
Commenter la réponse de cs_elnk
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 28 nov. 2007 à 10:04
0
Utile
Re,

L'exemple que je t'ai donné fait des requêtes paramétrées pour sqlServer, donc utilise des SQLParameter.
Si tu fait de l'OLEDB, utilise des OleDbParameter, comme il te le dit.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention - 28 nov. 2007 à 10:07
0
Utile
oui merci je viens de m en apercevoir aussi je viens de corriger
mais du coup j ai :

OleDbParameter paramNick = new OleDbParameter("@Nick", SqlDbType.VarChar);
paramNick.Value = "MonNick";
OleDbParameter paramNom = new OleDbParameter("@Nom", SqlDbType.VarChar);
paramNom.Value = "MonNom";
OleDbParameter paramPass = new OleDbParameter("@Pass", SqlDbType.VarChar);
paramPass.Value = "MonPass";
OleDbParameter paramPren = new OleDbParameter("@Pren", SqlDbType.VarChar);
paramPren.Value = "MonPrenom";
OleDbParameter paramIdR = new OleDbParameter("@idRang", SqlDbType.Int);
paramNick.Value = 2;

string Sql = string.Format("INSERT INTO Users(nick,password,nom,prenom,id_rang) " +
"VALUES({0},{1},{2},{3},{4})", paramNick.ParameterName, paramPass.ParameterName, paramNom.ParameterName, paramPren.ParameterName, paramIdR.ParameterName);
OleDbCommand cmd = new OleDbCommand(Sql.ToString(),maconnect);
cmd.Parameters.Add(paramNick);
cmd.Parameters.Add(paramPass);
cmd.Parameters.Add(paramNom);
cmd.Parameters.Add(paramPren);
cmd.Parameters.Add(paramIdR);

cmd.ExecuteNonQuery();

et toujours l erreur de stintaxe dans le INSERT INTO apparement.
"Erreur de syntaxe dans l'instruction INSERT INTO."
Commenter la réponse de cs_elnk
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 28 nov. 2007 à 11:11
0
Utile
Hello,

Désolé de revenir sur ça, mais est-ce que la requête fonctionne directement sous Access :

INSERT INTO Users (nick,password,nom,prenom,id_rang) VALUES ('monnick','monpassword','monmorandi','monprenom',2)

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention - 28 nov. 2007 à 11:46
0
Utile
oui elle fonctionne aussi directement sous access!
maintenant ca fonctionne sans Parameteres
avec : eds [] pour le password :

INSERT INTO Users(nick,[password],nom,prenom,id_rang..

merci pour ton aide SharpMao
Commenter la réponse de cs_elnk
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 28 nov. 2007 à 11:49
0
Utile
Encore un détail qui me fait peur,

Tu dis que ça marche aussi sans les paramètres, mais je t'en prie, ne fait pas l'erreur de ne pas les utiliser.
C'est la source de nombreux problèmes, comme je l'ai indiqué dans mon tuto.

Pour les requête à une DB, les paramètres doivent devenir un réflexe !

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
cs_elnk 49 Messages postés jeudi 8 novembre 2007Date d'inscription 23 mai 2010 Dernière intervention - 28 nov. 2007 à 12:00
0
Utile
oai j en tiens copmpte =) merci pour tout
Commenter la réponse de cs_elnk

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.