Probleme d'update/insert/delete

cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 13 mars 2007 - 31 oct. 2006 à 22:55
cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 13 mars 2007 - 1 nov. 2006 à 00:00
Salut !

J'ai un petit soucis : je n'arrive pas a faire d'update/insert/delete sur ma database. A priori, la chaine de caractère que j'utilise fonctionne (elle passe le QueryBrowser).
D'un point de vu architectural, j'ai un objet DBConnect qui est invoqué et la connexion ouverte pour chaque HttpContext (ceci est non discutable, vu que je peux aisément faire des selects à tout va avec).
Voici mon objet DBConnect :


public
class
DbConnect



{







private



MySqlConnection
_dbconn;


public
DbConnect(){

}


public



void
Dispose(){


this
._dbconn.Dispose();}


public



bool
Initialize(){


bool
ret =

false
;


try

{


_dbconn =




new



MySqlConnection
();_dbconn.ConnectionString =


"server=localhost;user id=root; password=nuwuugaemysql;database=wwwgareaugroumpfnet;"
;


/*ConfigurationManager.ConnectionStrings["connectionstring"].ToString(); ;*/

ret =




true
;}


catch

{







//TODO: Log






if
(_dbconn.ConnectionString ==

""
)ret =


false
;}


return
ret;}


public



bool
Open(){


bool
ret =

false
;


try

{


_dbconn.Open();


ret =




true
;}


catch

{







//TODO: Log

ret =




false
;}


return
ret;}


public



DataTable
ReadTable(

string
cmd){


MySqlDataAdapter
myAdapter =

new



MySqlDataAdapter
();myAdapter.SelectCommand =


new



MySqlCommand
(cmd, _dbconn);


DataSet
myDs =

new



DataSet
();myAdapter.Fill(myDs);


return
myDs.Tables[0];}


public



bool
Update(

string
cmd){


MySqlCommand
myCommand =

new



MySqlCommand
(cmd);myCommand.Connection =


this
._dbconn;myCommand.ExecuteNonQuery();


return



true
;}


public



bool
Insert(

string
cmd){


MySqlCommand
myCommand =

new



MySqlCommand
(cmd);myCommand.Connection =


this
._dbconn;myCommand.ExecuteNonQuery();


return



true
;}


public



bool
Delete(

string
cmd){


MySqlCommand
myCommand =

new



MySqlCommand
(cmd);myCommand.Connection =


this
._dbconn;myCommand.ExecuteNonQuery();


return



true
;}

}

Bref, quand je passe une commande a Select, ça passe, les autres, ça fait rien. Pourquoi ? (a noter que je n'ai ni exception, ni rien).

4 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
31 oct. 2006 à 23:14
Salut,

Là, la seule différence que je vois est l'ouverture de la connexion.
Un DataAdapter ouvre la connexion si elle ne l'est pas déjà, ils ont dû suivre le même comportement pour le provider MySQL.

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 13 mars 2007
31 oct. 2006 à 23:29
Je suis d'accord, mais quand je regarde en debug l'état de la connexion, il me dit bien "Open".
En debug pas à pas, je fais bien tout, les états semblent normaux, et le pire, c'est quand je regarde le nombre de row affected, il me sort bien "1".
J'ai modifié mon code pour ressembler à celui présent dans ce code source :
http://www.csharpfr.com/codes/DIVERS-CLASSES-POUR-UTILISER-MYSQL-ACCESS-SQL-SERVER_36034.aspx

Ma méthode d'update devient donc :

public
bool Update(
string cmd){

try{

MySqlDataAdapter myAdapter =
new
MySqlDataAdapter();myAdapter.SelectCommand =

new
MySqlCommand(cmd,
this._dbconn);myAdapter.SelectCommand.ExecuteNonQuery();

return
true;}

catch (
Exception e){

throw e;}

}

En debug pas à pas, je fais bien tout, les états semblent normaux, et le pire, c'est quand je regarde le nombre de row affected, il me sort bien "1".
Ma table Config ne contient qu'une ligne (c'est pour stocker la conf). Elle n'a pas de Key, et l'Update se fait sans clause WHERE. N'y aurait-il pas une protection inconnue de moi ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
31 oct. 2006 à 23:44
Bonne question.
Si c'est le cas, il faut peut être chercher du côté de MySQL.
Peut être un problème de droit, mais si tu as tester ta requête avec le même compte via leur analyseur de requête que celui de ta chaine de connexion, il n'y a pas de raison que ça ne passe pas dans le code.
Et si c'était le cas le provider devrait au moins te remonter une exception, au lieu d'échouer silencieusement et de retourner un nombre éronné.
Dernière solution me venant à l'esprit : un transaction implicite avec rollback implicite à la déconexion.

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_Sobieski Messages postés 54 Date d'inscription mardi 22 mars 2005 Statut Membre Dernière intervention 13 mars 2007
1 nov. 2006 à 00:00
Je pense plutôt tenter par la méthode dite de la procédure stockée, même si c'est une technique que je suis loin de maîtriser.
0
Rejoignez-nous