Gérer le forum:  Aide  •  Rechercher  •  Liste des Membres  •  Groupes d'utilisateurs   •  S'enregistrer  •  Profil  •  Se connecter pour vérifier ses messages privés  •  Connexion 
 question sur les bases de données Voir le sujet suivant
Voir le sujet précédent
Poster un nouveau sujetRépondre au sujet
Auteur Message
deco76
Forumeur occasionnel
Forumeur occasionnel




Messages: 36

MessagePosté le: Lun 31 Déc 2012 - 15:52 Répondre en citantRevenir en haut

Bonjour

Je développe un programme vb c#, et j'utilise une basse de donnée access.

Par flemme ou soucis d'efficacité,
je met chaque type de donnée en string
(parfois c'est du int, ou du float réellement)

Pour ne pas avoir à me prendre la tête pour l'insertion de donnée lors du développement de mon programme (ajouter guillemet ou non).

Ma question est, esse vraiment si mal ?
(je sais qu'il est important de bien distinguer les types, pour qu'un développeur tiers ne fasse pas d'erreur d'insertion)

Cela prend t-il plus de place dans ma base de donnée ?
une type mis en string dans une basse de donnée prend t-il vraiment toute l’allocation dont-il dispose (alors qu'il ne comporte que 10 lettre) ?

Merci pour vos futurs réponses. Wink
Voir le profil de l'utilisateurEnvoyer un message privé

N'oubliez pas de vous inscrire à la communauté pour participer. Si vous êtes déjà membre, connectez-vous pour faire disparaître ce bandeau publicitaire.
Zonag
Modérateur
Modérateur


BTS IG - Option réseau Diplômé
Sexe: Sexe:Masculin
Messages: 1298
Localisation: Toulouse

MessagePosté le: Mer 02 Jan 2013 - 17:22 Répondre en citantRevenir en haut

Salut,

Ca peut poser des problèmes pour les jointures.

Après effectivement ta base de données peut prendre plus de place et être moins performante, mais tu ne t'en rendra probablement pas compte sur des petits jeux de données (moins de quelques milliers d'enregistrement).

Et au delà de ça, tu perds certaines fonctionnalités natives de ton moteur de base de données (faire calculer des sommes ou des moyennes à des strings c'est pas évident Rolling Eyes )

Tu as quand même intérêt à bien typer tes champs, ça peut t'éviter quelques soucis plus tard dans ton appli ... (lorsque t'essaye d'additionner un numérique avec un string qui n'aurait jamais du se retrouver la par exemple).

_________________
Zonag
Voir le profil de l'utilisateurEnvoyer un message privé
deco76
Forumeur occasionnel
Forumeur occasionnel




Messages: 36

MessagePosté le: Mer 02 Jan 2013 - 21:42 Répondre en citantRevenir en haut

Bonsoir

Merci pour la réponse.

C'est ce que je compte faire par la suite (bien typer mes données)

Citation:
tu perds certaines fonctionnalités natives de ton moteur de base de données
Effectivement, je n'y pensée plus.

Une autre question qui ma pris la journée (je dois re-poster, un nouveau sujet ?)

est-il possible de faire un INSERT Massif dans une base de donnée access.
Je m'explique :

J'ai plusieurs thread qui lance la même classe qui contienne (pour chaque classe) une DataTable (heure, chiffre, chaine) qui est à l'intérieur.

Et Je souhaite insérer dans ma base.

Malheureusement cela me prend énormément de temps. Rolling Eyes
De plus Mon processeur chauffe et monte à + de 80%

Et même parfois VB Plante avec le message d'erreur qu'une des variables sont utilisées ailleurs (alors qu'à ma connaissance non).

Voici mon code sans procédure :

Code:

        string strTemp = "";
        string Values = "";

this.table = new DataTable();

            //Début Reception Reader Sur Impr Ecran Voulu
            OleDbDataReader myReader = this.GetReaderTableScreenEmpreinteYDebutYFin(Convert.ToString(this.IDScreenEmpreinte));

                //Début Lecture du Reader
                myReader.Read();
               
                    //Début Recherche du nom de la colonne souhaité
                    int NombreDeColonne = myReader.FieldCount;
                    for (int i = 0; i < NombreDeColonne; i++)
                    {

                            // Debut Insertion Nom + Type colonne dans DataTable
                            this.table.Columns.Add(myReader.GetName(i), typeof(string));
                       
                    }

                    // Debut Construction du Values
                    foreach (DataColumn column in this.table.Columns)
                    {
                        this.strTemp += column.ColumnName + ",";
                        this.Values += "@" + column.ColumnName + ",";
                    }

                    //Début Suppression Dernier Virgule
                    this.strTemp    = this.strTemp.Substring(0, this.strTemp.Length - 1);
                    this.Values     = this.Values.Substring(0, this.Values.Length - 1);

                myReader.Close();


         //Début Parcour
            for (int y = this.Y; y <= this.Y + this.TailleY; y++)
            {
                dateh();
                this.table.Rows.Add(this.IDScreenEmpreinte, Convert.ToString(this.X), Convert.ToString(y), Convert.ToString(this.MaCapture.GetPixel(this.X, y)), datenow, hournow, datenow, hournow);
            }

string requête = "ERROR";
         
            try
            {
                if (this.table != null)
                {
                    //Debut Boucle Dans Datatable
                    foreach (DataRow dr in this.table.Rows)
                    {
                        //Début Insertion dans DB
                        using (OleDbConnection oConn = new OleDbConnection(Connection))
                        {
                            oConn.Open();
                            requete = "INSERT INTO TableX (" + this.strTemp + ") values( " + this.Values + ")";
                            OleDbCommand oCmd = new OleDbCommand(requete, oConn);
                     
                            // formatage de la colonne à afficher
                            foreach (DataColumn column in this.table.Columns) { oCmd.Parameters.AddWithValue("@" + column.ColumnName, dr[column.ColumnName].ToString()); }
                            oCmd.ExecuteNonQuery();
                            oConn.Close();
                        }
                    }
                }
            }
            catch { MessageBox.Show("Erreur InsertTableScreenEmpreinteYDebutYFin  IDScreenEmpreinteScreenEmpreinteYDebutYFinS \n requête : " + requête); }



Si Vous pouviez donner vos avis/ Aides Wink


PS : Aussi pour la ligne this.table.Columns.Add(myReader.GetName(i), typeof(string));

Je n'arrive pas à récupérer le type de la donnée (si je veux bien typé mes données par la suite) par exemple un :
Code:
this.table.Columns.Add(myReader.GetName(i), typeof(myReader.GetName(i).GetType()));

Ne fonctionne pas ..

Je l'utilise pour variabilisé mes insertion (si dans le futur les champs changes, ou n'existe plus, ne pas tous mettre en dur. Mais récuperer les champs + leur type en cours.
Voir le profil de l'utilisateurEnvoyer un message privé
Zonag
Modérateur
Modérateur


BTS IG - Option réseau Diplômé
Sexe: Sexe:Masculin
Messages: 1298
Localisation: Toulouse

MessagePosté le: Ven 04 Jan 2013 - 16:47 Répondre en citantRevenir en haut

Je ne comprends pas trop ce que tu veux insérer.
Tu peux détailler stp au dela du code ?

_________________
Zonag
Voir le profil de l'utilisateurEnvoyer un message privé
deco76
Forumeur occasionnel
Forumeur occasionnel




Messages: 36

MessagePosté le: Mar 08 Jan 2013 - 01:31 Répondre en citantRevenir en haut

Bonsoir

Je souhaite insérer pixel par pixel une image modifier par mes soins en bitmap dans une base de donnée (par la suite les pixels seront crypté via un algo perso), je sais qu'on peut le faire sur le bitmap lui même mais ça ne m’intéresse pas.

Je viens de modifier mon code avec du LockBitmap et changer la base de donnée access en postgresql, ce que je souhaite c'est un moyen d’inserrer rapidement une multitude d'information.

La meilleur solution est un serveur à distance ?!

Merci
Voir le profil de l'utilisateurEnvoyer un message privé
Montrer les messages depuis:      
Poster un nouveau sujetRépondre au sujet
 Sauter vers:   



Voir le sujet suivant
Voir le sujet précédent
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum