Créer une base de données locale via un DataSet

Waylander - 11 sept. 2015 à 15:10 - Dernière réponse : Waylander59 11 Messages postés vendredi 11 septembre 2015Date d'inscription 7 octobre 2015 Dernière intervention
- 5 oct. 2015 à 09:49
Bonjour à tous.

Je viens vous voir après deux jours d'intenses recherches..
Voici mon problème :


Je souhaite créer une base de données locale via un DataSet rempli au préalable.
J'ai testé avec la classe SqlConnection, mais pas moyen de me connecter (même sur une base créée manuellement via Visual Studio (2008 au passage)). Et je me retrouve avec le même soucis de connexion avec un SqlDataAdapter..
J'ai déjà passé deux jours à comprendre et faire fonctionner les DataSet (surtout avec DataRow qu'on ne peut pas instancier via son constructeur) alors je commence un peu à désespérer.. Si quelqu'un a une solution, je suis preneur :)

Je vous mets une partie de mon code, qui permet de remplir mon dataset (attention les yeux, ça pique !) :


private bool RemplirDataSet(int nb)
        {
            bool reussite = false;
            string[] lignes = new string[nb];

            //Récupération du fichier de sauvegarde
            Fichier fichier = new Fichier(fichierSauvegarde);
            lignes = fichier.LireFichierParLigne(fichierSauvegarde);

            // création dataset
            DataSet ds = new DataSet();
            ds = CreerBasePerso();

            // création datatable + colonnes
            DataTable dt = new DataTable();
            dt = CreerTablePerso(ds);

            string[] fill = new string[dt.Columns.Count - 1];

            // création + ajout de lignes dans la table
            for (int i = 0; i < lignes.Length; i++)
            {
                DataRow dr = dt.NewRow();
                fill = lignes[i].Split(';');
                for (int j = 0; j < fill.Length; j++)
                {
                    dr[j + 1] = fill[j];
                }
                dt.Rows.Add(dr);
                reussite = true;
            }
            return reussite;
        }


Pour info, "LireFichierParLigne()" me permet de récupérer les données de mon fichier .txt (qui seront intégrées dans mon dataset). Ces données sont séparées par un ";" afin de les différencier.


Merci à vous !

EDIT : Ajout du LANGAGE dans les balises de code.
Explications disponibles ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

Votre réponse

11 réponses

Whismeril 11961 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 août 2018 Dernière intervention - 11 sept. 2015 à 18:19
0
Merci
Bonjour

je fait très peu de base de données, mais je n'aime pas me servir de dataset.
Je préfère écrire une classe dont les propriétés correspondent aux "champs" de mes données et remplir une List<T>.

Au passage, je ne sais pas ce que fait ta classe Fichier,
mais si elle ne sert qu'à lire ton fichier texte ligne par ligne, alors
System.IO.File.ReadAllLine le fait déjà.
Commenter la réponse de Whismeril
cgandco 219 Messages postés mercredi 26 octobre 2011Date d'inscription 22 juin 2017 Dernière intervention - 12 sept. 2015 à 09:39
0
Merci
Bonjour,

si ta table sql existe

tu peux facilement faire

1. creer SqlDataAdapter
2. definir les commande select,insert , update, delete
3. faire un fill vers ton dataset ou datatable
4. ajouter les données dans ton dataset ou datatable
5. executer tonDataAdapter.update()

si ta table n'existe pas tu peux avant cela creer un SqlCommand pour un create table et lancer un ExecuteNonQuery

Bonne journée
Commenter la réponse de cgandco
Waylander59 11 Messages postés vendredi 11 septembre 2015Date d'inscription 7 octobre 2015 Dernière intervention - 14 sept. 2015 à 09:56
0
Merci
Whismeril 11 sept. 2015 à 18:19

Au passage, je ne sais pas ce que fait ta classe Fichier,
mais si elle ne sert qu'à lire ton fichier texte ligne par ligne, alors
System.IO.File.ReadAllLine le fait déjà.


J'utilise cette fonction plus d'une fois alors au lieu de l'appeler tout le temps, j'ai instancier un objet de ma classe Fichier et je fais appel à ma fonction "LireFichierParLigne". Ma classe travaille aussi sur mon fichier, c'est plus pratique de tout regrouper.


cgandco 12 sept. 2015 à 09:39

si ta table sql existe


Justement, elle n'existe pas, d'où mon problème posé. Je souhaiterai, à partir de mon dataSet (ou de mon fichier), créer une base de données locale. J'ai créé manuellement une dataBase mais elle ne fonctionne pas, l'accès m'est refusé (je n'ai ni ID, ni mdp)..

J'ai l'habitude de me connecter sur des serveurs SQL mais là, mon projet est situé sur des postes uniques (peut fonctionner sans accès réseau etc..).
Whismeril 11961 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 août 2018 Dernière intervention - 14 sept. 2015 à 13:09
Bonjour

J'utilise cette fonction plus d'une fois alors au lieu de l'appeler tout le temps, j'ai instancier un objet de ma classe Fichier et je fais appel à ma fonction "LireFichierParLigne". Ma classe travaille aussi sur mon fichier, c'est plus pratique de tout regrouper.

Ok
Commenter la réponse de Waylander59
Waylander59 11 Messages postés vendredi 11 septembre 2015Date d'inscription 7 octobre 2015 Dernière intervention - 15 sept. 2015 à 09:29
0
Merci
Personne n'a de solutions ? :(
Commenter la réponse de Waylander59
cgandco 219 Messages postés mercredi 26 octobre 2011Date d'inscription 22 juin 2017 Dernière intervention - 15 sept. 2015 à 10:16
0
Merci
Bonjour,

Comme base local tu utilise quoi ?

SQLExpress ou SQL Compact ?

si c'est SQL Compact tu dois employer SqlCe...

J'ai testé cela fonctionne bien (une simple connection et une commnde insert ... et ExecuteNonQuery

SqlCeConnection conn = new SqlCeConnection (@"Data Source=G:\brol\WindowsFormsApplication2\WindowsFormsApplication2\Database1.sdf");
            conn.Open();
            SqlCeCommand cmd = new SqlCeCommand("insert test(Nom,Prenom) values('Dupont','avecT') ");
            cmd.Connection = conn;
            cmd.ExecuteNonQuery();
            conn.Close();


Bonne journée
Waylander59 11 Messages postés vendredi 11 septembre 2015Date d'inscription 7 octobre 2015 Dernière intervention - 15 sept. 2015 à 10:19
Je suppose que j'utilise SQL compact (création d'un fichier BdD .sdf via visual studio). Je teste ce midi, je te tiens au courant.

PS : je suis obligé de mettre le chemin complet de la DataBase ?
cgandco 219 Messages postés mercredi 26 octobre 2011Date d'inscription 22 juin 2017 Dernière intervention > Waylander59 11 Messages postés vendredi 11 septembre 2015Date d'inscription 7 octobre 2015 Dernière intervention - 15 sept. 2015 à 10:27
Je suppose que non si tu mets ta base dans le directory de ton exe mais en debug cela se complique.

le plus facile est de mettre ta connection string dans ton fichier App.config

Bonne journée
Waylander59 11 Messages postés vendredi 11 septembre 2015Date d'inscription 7 octobre 2015 Dernière intervention > cgandco 219 Messages postés mercredi 26 octobre 2011Date d'inscription 22 juin 2017 Dernière intervention - 15 sept. 2015 à 11:17
Là j'avoue je sais pas utiliser le fichier App.config.. Et oui j'ai ma base dans le directory de mon projet. A mon avis mon soucis se pose sur la chaine de connexion.
cgandco 219 Messages postés mercredi 26 octobre 2011Date d'inscription 22 juin 2017 Dernière intervention > Waylander59 11 Messages postés vendredi 11 septembre 2015Date d'inscription 7 octobre 2015 Dernière intervention - 15 sept. 2015 à 12:27
pour trouver ta chaine de connection, tu ouvre ta fenetre explorateur de serveur dans visual studio, tu te place sur ta base sdf. et la connection string est dans la fenetre de propriete.

pour app.Config

dans app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
      <add name="ta_connection_string" connectionString="Data Source=G:\brol\WindowsFormsApplication2\WindowsFormsApplication2\Database1.sdf"/>
    </connectionStrings>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>


tu ajoutes une réference à system.configuration, le using et voila le code

String connStr = ConfigurationManager.ConnectionStrings["ta_connection_string"].ConnectionString;
            SqlCeConnection conn = new SqlCeConnection (connStr );
            conn.Open();
            SqlCeCommand cmd = new SqlCeCommand("insert test(Nom,Prenom) values('theNom','thePrenom') ");
            cmd.Connection = conn;
            cmd.ExecuteNonQuery();
            conn.Close();



c'est beaucoup plus facile car tu ne dois pas recompiler pour changer de connection string, ce fichier sera avec ton exe sous le nom de "nomdetonexe.config"

bonne journée
Waylander59 11 Messages postés vendredi 11 septembre 2015Date d'inscription 7 octobre 2015 Dernière intervention > cgandco 219 Messages postés mercredi 26 octobre 2011Date d'inscription 22 juin 2017 Dernière intervention - 5 oct. 2015 à 09:49
Merci pour tes réponses j'ai enfin réussi à trouver mon problème après de maintes recherches !

Je n'avais pas la bonne version ni la bonne dll de System.Data.SqlServerCe. Celle-ci pointait sur une version mobile de sqlServer au lieu de la version compact (que j'ai du modifié aussi car installé en 32 bits alors que je suis en 64 bits..)

Morale du jour : quand on récupère un PC qui n'est pas le sien, toujours vérifier les versions des outils utilisés !
Commenter la réponse de cgandco

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.