Je n'arrive pas à modifier une base de donnée sous SQL server Express 2005 à par [Résolu]

Messages postés
11
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
17 juin 2006
- - Dernière réponse : mydust
Messages postés
11
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
17 juin 2006
- 21 févr. 2006 à 01:08
Bonjour, je souhaiterai modifier une base de donnée après avoir modifier un dataset ou un datagrid. C'est tout simple mais bon, je n'y arrive pas, je débute en c#+sql. Pour l'instant j'essaie de le faire en modifiant le dataset. Donc, je récupère les données dans un dataset (utilisation d'un sqladaptater et remplissage du dataset). Jusque là tout va bien. Ensuite, je modifie le dataset en modifiant une cellule. J'accepte les modifications, cela passe car je l'affiche dans une datagrid. Ensuite, je fais un Update via le sqladaptater, mais là, rien ne se passe, ma base de données ne change pas, je ne sais pas pourquoi... Voici mon bout de code:

sqlDs.Clear();


sqlDs.Tables.Clear();



string source =mySqlClient.sConfigSqlConnect("(local)\\SQLEXPRESS","Gescom"); //c'est une procédure qui fonctionne et qui renvoit le string de connection


sqlCnx.ConnectionString = source;


sqlCnx.Open();



string sSql="SELECT * FROM "+comboBox1.SelectedItem.ToString();


sqlDA=
new SqlDataAdapter(sSql,sqlCnx);


sqlDA.Fill(sqlDs,"maTable");


sqlDs.Tables[0].Rows[0][3]="manouvellevaleur";


sqlDs.AcceptChanges();


label1.Text = sqlDs.Tables[0].TableName;


sqlDA.Update(sqlDs,"maTable");


maDataGrid.DataSource = sqlDs.Tables["maTable"];



//maDataGrid.SetDataBinding(sqlDs,"maTable"); //le fait de mettre un data binding il faut rester connecter je pense...


sqlDA.Dispose();


sqlDA =
null;


sqlCnx.Close();

Quand j'ouvre le sql manager pour vérifier les données, rien n'a été changé..., je ne trouve pas ou j'ai fait une erreur :s, quelqu'un pourrait m'aider s'il vous plait? Par après je souhaiterais utiliser un datagrid pour modifier la base de données en direct et aussi utiliser un bouton pour modifier une autre base de donnée mais par click. Il me semble qu'il faille utiliser un


maDataGrid.SetDataBinding(sqlDs,"maTable");

mais quand je fais cela j'ai aussi des problèmes. car si je place ce code à chaque fois que je lance le code que j'ai joints après la première fois, mon datagrid est rempli de NULL... Et là, je bloque encore depuis 2 semaines dessus :s... donc, s'il y a un quelqu'un qui peut m'aider cela serait vraiment sympa
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
11
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
17 juin 2006
3
Merci
bonjour à tous, merci pour votre aide.Je n'ai pas utilisé le commandbuilder qui permettrai en fait de faire une modification de la base de données tout en controler la succession des modification de la table entre insert, update et delete.Le fait d'utiliser update de l'adapter permet si j'ai bien compris de générer lui meme les commandes sql adéquates.Pour dire vrai,je ne sais pas vraiment ce que j'ai fait de spécial pour que cela fonctionne car c'est un peu nébuleux.Mais j'explique en gros.Je crée une dataset qui contient les modifications du premier dataset.Et je fais l'update dessus (note je l'ai fait plein de fois avec plein de petites modifications).Après une vingtaine d'essais et de désespoir oh miracle, ca fonctionne.... voici le bout de code je le tape tel quel car c'est juste un essai que je vais implémenter dans mon projet plus tard. Si cela peut aider des gens ou bien s'il y a des commentaires à faire dessus, je serais bien content de les savoir ;).Ce n'est pas propre, je sais, mais bon, il est une heure du matin et ca marche, donc je suis content après plusieurs semaines de blocage :) :) :) :) :) :). A plus et encore merci.

sqlDs.Clear();


sqlDs.Tables.Clear();



string source =mySqlClient.sConfigSqlConnect("(local)\\SQLEXPRESS","Gescom");


sqlCnx.ConnectionString = source;


SqlCommandBuilder cmdBuilder;
// permet de générer automatiquement les requetes sql


sqlCnx.Open();



string sSql="SELECT * FROM "+comboBox1.SelectedItem.ToString();


SqlCommand selectCMD =
new SqlCommand(sSql, sqlCnx);


sqlDA=
new SqlDataAdapter();


sqlDA.SelectCommand = selectCMD;


sqlDA.Fill(sqlDs);
//,"maTable"



// Set the MissingSchemaAction property to AddWithKey because Fill will not cause primary



// key & unique key information to be retrieved unless AddWithKey is specified



//sqlDA.MissingSchemaAction = MissingSchemaAction.Add;


sqlDs.Tables[0].Rows[1][3]="manouvellevaleur";
//ligne 1 et colonne 3, on aurait pu mettre le titre de la colonne



//UpdateDataSet(sqlDs);



//sqlDs.AcceptChanges();



if (sqlDs.HasChanges())


{


DataSet xDataSet;


xDataSet = sqlDs.GetChanges(DataRowState.Modified);


cmdBuilder =
new SqlCommandBuilder(sqlDA);


sqlCmd =
new SqlCommand(cmdBuilder.GetUpdateCommand().CommandText, sqlCnx);



int i = sqlDA.Update(xDataSet);


MessageBox.Show(String.Format(
null, "{0} lignes ont été mise à jour dans la base de données", i.ToString()),


String.Format("Mise à jour"), MessageBoxButtons.OK, MessageBoxIcon.Information);


}


maDataGrid.DataSource = sqlDs.Tables[0];
//"maTable"



//dataGrid_ajout.DataSource = xDataSet.Tables[0];


// //maDataGrid.SetDataBinding(sqlDs,"maTable"); //le fait de mettre un data binding il faut rester connecter je pense...


sqlDA.Dispose();


sqlDA =
null;


sqlCnx.Close();

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Commenter la réponse de mydust
Messages postés
4947
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
30
0
Merci
hum... il faut aussi lui donner la requête pour enregistrer ou supprimer les valeurs

il existe des assistants qui font ca tout seul... c'est pas parce qu'on les utilise qu'on est mauvais. ca permet de gagner du temps.

Bref, sinon dans ton SqlDataAdapter tu as 4 types de requêtes :
- SelectCommand
- UpdateCommand
- DeleteCommand
- InsertCommand


Sébastien FERRAND (
blog)
[Microsoft MVP Visual C#]
Commenter la réponse de sebmafate
Messages postés
11
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
17 juin 2006
0
Merci
Salut, je vais essayer, merci. Je vous tiens au courant. En fait je pensais que le update de l'adapter générait lui meme ce qu'il faut pour effectuer l'update :s... Au fait, j'utilise visual c#2003 avec le sql server 2005 express j'espère que cela ne pose pas trop de problème?
Commenter la réponse de mydust
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
38
0
Merci
Salut,

regarde si la classe SqlCommandBuilder ne peut pas t'aider



Mx
MVP C#
Commenter la réponse de MorpionMx
Messages postés
11
Date d'inscription
vendredi 25 février 2005
Statut
Membre
Dernière intervention
17 juin 2006
0
Merci
bon je n'arrive pas à accepter ma propre réponse donc je vais accepter l'une des votre :)....
Commenter la réponse de mydust