So erstellen Sie eine generische Liste, und füllen Sie mit einer Select-SQL-Abfrage in c#
Arbeite ich mit C # in Visual Studio Express 2012. Ich arbeite ausschließlich mit desktop-Anwendungen.
Als Datenbank verwende ich MySQL
Die Verbindung zwischen der Datenbank und MySQL funktioniert perfekt.
Meine Frage ist darum, die Suche und das Ergebnis zurückgeben.
Von allen Beispielen, die ich gesehen habe, der häufigste ist das erstellen einer Methode in meiner MySQL-Klasse enter code here
Verbindung, die zurückkehren wird eine Liste mit dem suchergebnis. Ich weiß wirklich nicht, ob dies konzeptionell mehr korrigieren, aber es scheint sehr annehmbar.
ich habe eine Suche, liefert alle Kunden aus meiner Tabelle. Aber meine große Frage ist: wie machen diese generische Methode?
ZB
Meine form hat einen button, der löst das Ereignis click:
dbConnect = new DBConnect();
dbConnect.OpenConnection();
private List<Clients> listSQLQuery;
listSQLQuery = dbConnect.Select("select * from clients");
datagridview.DataSource = listSQLQuery;
Meine Methode dboConnect.Wählen Sie() oben verwendet:
public List<Clients> Select(string query)
{
//Create a list to store the result
List<Clients> list = new List<Clients>();
Clients clients = new Clients();
//Open connection
if (this.OpenConnection() == true)
{
//Create Command
MySqlCommand cmd = new MySqlCommand(query, connection);
//Create a data reader and Execute the command
MySqlDataReader dataReader = cmd.ExecuteReader();
//Read the data and store them in the list
while (dataReader.Read())
{
clients.Id = dataReader["Id"].ToString();
clients.Name = dataReader["Name"].ToString();
list.Add(cliente);
}
//close Data Reader
dataReader.Close();
//close Connection
this.CloseConnection();
//return list to be displayed
return list;
}
else
{
return list;
}
}
Und schließlich, meine Klasse Kunden
public class Clients
{
public string Id { get; set; }
public string Name { get; set; }
}
Das alles funktioniert, aber ist sehr spezifisch für eine Abfrage mit einem Client.
nun, Wenn ich einen Anruf listSQLQuery=dbConnect.Select("select * from Produkte") diese Methode wird nicht funktionieren, weil es war gebaut als Rückgabe eine Liste der Clients und nicht der Produkte.
ich weiß nicht, wenn ich könnte klar sein, in meiner Frage, aber ich wünschte, ich könnte telefonieren möchten, ohne sich sorgen, wenn seine gonna ein Kunde, ein Produkt oder ein Zimmer.
Etwas wie dieses:
listSQLQuery.dbConnect.Select("select * from clients");
listSQLQuery.dbConnect.Select("select * from products");
listSQLQuery.dbConnect.Select("select * from rooms");
gibt es einen Weg, um eine generische Liste zurück, ohne sich Gedanken über die Art der listQuerySQL? Ich möchte nur, binden Sie diese Liste, um ein datagridview.
Ich bin ziemlich Anfänger in C#, so dass ich nicht wissen, etwas über LINQ, Entity Framework...
- Ja, der Linq und EF wird eine gute Wahl sein! Verbringen Sie einige Zeit, um es zu lernen und Sie werden nie bedauern über diese.
- Wenn Sie möchten, mit Hilfe der Tabelle die Spalten als Objekte, die Sie sollten lernen, über Linq und EF. Dies wird sehr hilfreich sein in Ihrem Fall.
- möglich, Duplikat der C# - IDataReader zu-Objekt mapping, die Verwendung von Generika
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Stimme mit den anderen Kommentatoren, wenn Sie lernen, EF und LINQ-Es wird Ihr Leben viel einfacher.
Entity Framework-Video
Einführung in LINQ-Video
Einführung in LINQ-Abfragen Webseite
Viele von LINQ-Beispiele für C#
In Bezug auf Ihre Lösung vielleicht können Sie nur 3 verschiedenen Methoden Auswählen: SelectClients, SelectProduct und SelectRooms. Sie müssen sich ein bisschen ändern, der code, so dass es nur öffnet und schließt die Verbindung einmal.
Können Sie Ihre Select-Methode wie folgt aus und bieten separate Methoden zum Parsen und erstellen Sie eine Instanz Ihrer Entitäten aus einem datareader.
EDIT: ich bin nicht einverstanden mit EF-Empfehlungen. Da Sie neu in C#, spielen mit einigen grundlegenden Sachen macht Sie verstehen, EF und einige DAL einfacher Muster. Fühlen sich zuversichtlich über die untere Ebene Teile des Systems ist sehr wichtig, wenn du eine Wand in einem Projekt, und wenn Sie tiefer Tauchen müssen, um das Innenleben.
Wenn Sie fühlen Sie sich komfortabel über DAL Technologien bereits, Sie können wechseln zu EF oder NHibernate leicht.