La bonne façon d'obtenir des données à partir d'une Base de données Access
Je suis un peu confus de la façon d'obtenir des données à partir d'une base de données access. Est-il bon pour les rassembler en premier dans la Liste, puis obtenir ces données à partir de votre Liste, OU s'il est d'accord pour juste obtenir directement dans votre base de données ?
Mes codes fonctionnent parfaitement bien, mais je veux savoir si il ya une meilleure façon de le faire?? :
private void button3_Click(object sender, EventArgs e)
{
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\redgabanan\Desktop\Gabanan_Red_dbaseCon\Red_Database.accdb");
connection.Open();
OleDbDataReader reader = null;
OleDbCommand command = new OleDbCommand("SELECT * from Users WHERE LastName='"+textBox8.Text+"'", connection);
reader = command.ExecuteReader();
listBox1.Items.Clear();
while (reader.Read())
{
listBox1.Items.Add(reader[1].ToString()+","+reader[2].ToString());
}
connection.Close();
*Je reçois mes enregistrements directement à partir d'une base de données, puis de les afficher dans une listbox.
Préparez-vous à une exception non gérée.
OriginalL'auteur Red Gabanan | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
Une chose qui sortait comme un pouce endolori est le SQLInjection et à l'utilisation de Paramétrer des requêtes, par exemple:
De ce que vous faites est tout à fait acceptable, bien que vous seriez généralement préférable d'utiliser une Base de données SQL.
Edit:
Voici comment vous séparer de votre logique métier de l'interface graphique:
GUI
Merci. C'est tout ce que je veux savoir que mes codes sont beaux. J'ai utilisé Parametised requêtes maintenant.
Si votre n'ayant pas toutes les erreurs, c'est très bien 🙂
L'ajout d'une exception d'un mécanisme de gestion sera la bonne.Comme il n'y a aucune garantie qu'il y aura une base de données access avec codé en dur nom de la table avec des accès en lecture.
OriginalL'auteur Jeremy Thompson
Je dirais que la réponse est "oui" à la fois.
Ce que vous allez faire maintenant est parfaitement acceptable pour les cas simples. Juste être conscient qu'il n'est pas "à l'échelle" très bien. Qui est, chargement de 10 ou 20 éléments est très bien. Mais qu'advient-il si il devient 10 de milliers ou des millions?
Dans ce cas, vous voulez regarder à l'aide d'un Modèle-Vue-Contrôleur (MVC) de l'architecture. C'est un sujet en lui-même, mais, fondamentalement, vous dissocier de la zone de liste ("view") à partir des données (le "modèle").
Voir ce site pour un C#centrée sur le MVC discussion
Entre ce que vous faites maintenant et d'une véritable architecture MVC, vous pouvez simplement le faire comme vous le suggérez - charger la liste en premier, puis les ajouter à la zone de liste. Que gagne rien à vous si vous il suffit de charger une fois, mais si la liste est chargé "tous sur la place", vous pouvez enregistrer la base de données IO généraux à chaque fois par le simple accès à une fois.
Le fait que vous avez pensé à poser la question indique que vous êtes sur la bonne voie.
OriginalL'auteur Mark Stevens
Bien que votre code fonctionne sans problème, je vous propose de réaliser certaines de gestion des exceptions comme dans cet exemple, puisque les deux
OleDbConnection.Open()
etOleDbCommand.ExecuteReader()
pourrait jeter unInvalidOperationException
.Il est également fréquent pour envelopper la connexion avec un
à l'aide de
déclaration, de sorte que dans la finconnection.close()
est appelé automatiquement, mais c'est juste une question de préférence personnelle.OriginalL'auteur A. Rodas
Vous pouvez peut-être séparer les fonctions d'accès aux données dans des classes différentes ou créer des fonctions génériques pour récupérer des documents.
+1 Merci pour cette. J'ai inclus le code de le démontrer dans ma réponse
OriginalL'auteur Gian Acuna