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

Résolu
mydust Messages postés 11 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 17 juin 2006 - 19 févr. 2006 à 23:43
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

5 réponses

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:06
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();
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
20 févr. 2006 à 10:40
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#]
0
mydust Messages postés 11 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 17 juin 2006
20 févr. 2006 à 12:59
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?
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
20 févr. 2006 à 14:30
Salut,

regarde si la classe SqlCommandBuilder ne peut pas t'aider



Mx
MVP C#
0

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

Posez votre question
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
bon je n'arrive pas à accepter ma propre réponse donc je vais accepter l'une des votre :)....
0
Rejoignez-nous