Erreur lors d'une procédure d'insertion [Résolu]

Signaler
Messages postés
4
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
31 janvier 2008
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
Bonjour,
Je debute en asp.net. Après une procédure d'Insert j'ai l'erreur suivante.

Voici mon code :


<hr />






Protected



Sub
Button1_Click(

ByVal
sender

As



Object
,

ByVal
e

As
System.EventArgs)


Dim
con

As
System.Data.OleDb.OleDbConnection


Dim
command

As
System.Data.OleDb.OleDbCommand


Dim
req

As



String






Dim
ligneconnection

As



String







con =




New
System.Data.OleDb.OleDbConnection()ligneconnection =


"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DBase\liens.accdb;Persist Security Info=False;"

con.ConnectionString = ligneconnection





con.Open()





req =




"INSERT INTO Client(CodeClient, NomClient, Contrat, AccordTeleInterv, Ticket, Email)"

req &=




"VALUES ('"
& TextBox1.Text &

"','"
& TextBox2.Text &

"','"
& DropDownList1.SelectedItem.Value &

"','"
& CheckBox1.Checked &

"','"
& TextBox3.Text &

"','"
& TextBox4.Text &

"');"







command =




New
System.Data.OleDb.OleDbCommand(req,con)

command.ExecuteNonQuery()

Label1.Text =


"Le client "
& TextBox2.Text &

" a bien été ajouté"

Label1.Visible =




True







con.Close()










End



Sub
<hr />
Merci d'avance pour votre aide

11 réponses

Messages postés
79
Date d'inscription
lundi 28 octobre 2002
Statut
Membre
Dernière intervention
21 octobre 2008

le problème vient que checkbox1.checked te ramène true au lieu de True pour la sgbd.
Une solution simple c'est de passer par une variable intermédiaire :

DimAccordTeleIntervAs
String=
"0"

If CheckBox1.Checked .Checked =
True
Then
     AccordTeleInterv =

"1'"
End
If

req &=
"VALUES ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & DropDownList1.SelectedItem.Value & "','" & AccordTeleInterv  & "','" & TextBox3.Text & "','" & TextBox4.Text & "');"
Messages postés
58
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
13 septembre 2012
1
Bonjour,
Souvent on fait pas gaffe dans les requête est PAF erreur !!

Moi j'affiche ou je met un point d'arret sur mes requête comme sa tu copie la requete est puis tu l'execute sur ton SGBDR qui te donne généralement la solution.

Sinon essai une requete toutes simple voir si c'est pas la connection.

Cordialement
Messages postés
4
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
31 janvier 2008

La requete marche sur mon sgbr
Messages postés
79
Date d'inscription
lundi 28 octobre 2002
Statut
Membre
Dernière intervention
21 octobre 2008

Fait un test en enlevant le CheckBox1.Checked (histoire true/1).

sinon n'oublie pas de protéger ton code contre les '.
Messages postés
14
Date d'inscription
dimanche 10 septembre 2006
Statut
Membre
Dernière intervention
25 mars 2008

type misatch... t as pas un probleme sur ton booleen?
genre il ferait pas la conversion implicite?
tu peux utiliser un adaptateur : OleDbDataAdapter
et setter tes param pour etre certain des types...
Messages postés
58
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
13 septembre 2012
1
J'ai trouver une solution bricolage:
Tu n'a pas accées a tes colonne mais tes lignes donc tu fait

TableCell
maCellule;





foreach
(

GridViewRow
maLigne

in
gridview.Rows)



{


maCellule = maLigne.Cells[1];


maLigne.Cells.Remove(maLigne);


}


 l'indice de ta cellule dependant de ou ta collone est placée bien sur

Cordialement
Messages postés
58
Date d'inscription
mercredi 25 avril 2007
Statut
Membre
Dernière intervention
13 septembre 2012
1
Désolé c'est
maLigne.Remove(maCellule); dans le foreach
Messages postés
4
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
31 janvier 2008

En effet si a la place de checkbox1.checked, je met True ma requete passe sans aucun problème

comment puis je recupéré le résultat de ma check box ?
Messages postés
14
Date d'inscription
dimanche 10 septembre 2006
Statut
Membre
Dernière intervention
25 mars 2008

c est quoi ta table? le type sgbd deAccordTeleInterv c est un bool? un string?
Messages postés
4
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
31 janvier 2008

Merci Zuff ta solution marche nickel et à en plus l'avantage d'etre simple
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonsoir,

et pourquoi ne pas utilisé des requêtes paramètrés ? cela évite tout problème de sql injection et fait la conversion automatique.
IDBCommand command new OleDBCommand("Select pouet from toto where truc ?chose", conn);

OleDBParameter p = new OleDBParamter("?chose", type);
p.Value = true;
command.Parameters.Add(p);

je me souviens plus exactement de la syntaxe sous access mais ca doit ressembler à ca.

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant