Requete sql

Résolu
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010 - 27 nov. 2007 à 22:54
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010 - 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.

13 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
28 nov. 2007 à 11:26
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)
3
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
28 nov. 2007 à 08:37
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)
0
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010
28 nov. 2007 à 08:39
ok je vais essayer
0
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010
28 nov. 2007 à 09:13
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 :/
0

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

Posez votre question
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
28 nov. 2007 à 09:29
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)
0
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010
28 nov. 2007 à 09:50
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.
0
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010
28 nov. 2007 à 09:58
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!
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
28 nov. 2007 à 10:04
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)
0
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010
28 nov. 2007 à 10:07
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."
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
28 nov. 2007 à 11:11
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)
0
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010
28 nov. 2007 à 11:46
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
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
28 nov. 2007 à 11:49
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)
0
cs_elnk Messages postés 49 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 23 mai 2010
28 nov. 2007 à 12:00
oai j en tiens copmpte =) merci pour tout
0
Rejoignez-nous