C# Mysql mehrere Abfragen
Ich versuche zu bauen, ein kleines status-tool. Ich brauche, um die Ergebnisse mehrerer Abfragen (etwa 4-5). Die Allgemeine Anschluss-setup und 'how-to-read-Daten" wird bereits getan, aber ich kann nicht herausfinden, wie die andere Abfrage ausgeführt.
Alles, was ich gefunden während der Suche für Sie es ist für die SqlClient. Im völlig überfordert mit dieser.
Hier ist mein code bisher (Geduld, ich bin ein Neuling auf diesem):
private void button1_Click(object sender, EventArgs e)
{
if(listView1.Items.Count > 1)
{
listView1.Items.Clear();
}
var listMember = new List<string>{};
var listOnline = new List<string>{};
//SQL PART //
string connString = "Server=10*****;Port=3306;Database=e***;Uid=e***;password=********************;";
MySqlConnection conn = new MySqlConnection(connString);
MySqlCommand command = conn.CreateCommand();
command.CommandText = "SELECT fullname,online FROM member WHERE active = '1' ORDER BY online DESC";
try
{
conn.Open();
}
catch (Exception ex)
{
listView1.Items.Add("Error: " + ex);
}
MySqlDataReader reader = command.ExecuteReader();
while(reader.Read())
{
listMember.Add(reader["fullname"].ToString());
listOnline.Add(reader["online"].ToString());
}
conn.Close();
//SQL ENDING //
//SET ENTRIES TO LISTVIEW //
int counter = 0;
foreach(string member in listMember)
{
ListViewItem item = new ListViewItem(new[] { member, listOnline.ElementAt(counter) });
item.ForeColor = Color.Green;
listView1.Items.Add(item);
counter++;
}
}
Ich bin nicht wirklich sicher, wie sich das design/layout Aussehen wird, am Ende, so möchte ich nur anfügen, die Ergebnisse zu Listen, die in der sql-Teil, um die Daten später aus den Listen.
Muss ich wirklich haben, um das setup eine komplette neue Verbindung nach conn.Schließen()? Oder gibt es eine andere Möglichkeit? Ich kann mir nur vorstellen: 5 Abfragen mit eigenen Verbindungs -, try -, catch-und 2-Schleifen... dies wird etwa 100-200 Zeilen nur für das abrufen der Ergebnisse von 5 Abfragen. Ist das nicht ein bisschen zu viel für so eine einfache Sache?
Hoffnung für etwas Hilfe.
Grüße.
Nach der neuen Kommentare meiner neuesten code:
Top:
public partial class Form1 : Form
{
public static string connString = "Server=10****;Port=3306;Database=e****;Uid=e****;password=****;";
public Form1()
{
InitializeComponent();
MySqlConnection conn = new MySqlConnection(connString); //Error gone!
}
Körperteil:
public void QueryTwoFields(string s, List<string> S1, List<string> S2)
{
try
{
MySqlCommand cmd = conn.CreateCommand(); //ERROR: conn does not exist in the current context.
cmd.CommandType = CommandType.Text;
string command = s;
cmd.CommandText = command;
MySqlDataReader sqlreader = cmd.ExecuteReader();
while (sqlreader.Read())
{
S1.Add(sqlreader[0].ToString());
S2.Add(sqlreader[1].ToString());
}
sqlreader.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void button1_Click(object sender, EventArgs e)
{
if(listView1.Items.Count > 1)
{
listView1.Items.Clear();
}
var listMember = new List<string>{};
var listOnline = new List<string>{};
using (conn) //ERROR: conn does not exist in the current context.
{
conn.Open();
///...1st Query
QueryTwoFields("SELECT fullname,online FROM member WHERE active = '1' ORDER BY online DESC",listMember,listOnline);
//...2nd query
//QueryTwoFields("your new Select Statement", otherList, otherList);
}
}
- Schöne Frage und Antworten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nicht haben, um die enge Verbindung jedes mal, wenn Sie ausführen einer Abfrage rarher als in der Nähe der sqlreader zugewiesen, die Verbindung. Schließlich, wenn alle Ihre Abfragen ausgeführt wurden, schließen Sie die Verbindung. Zu beachten ist auch der Gebrauch mit:
Sie cal auch eine Methode definieren, die für die Ausführung der Abfrage in Reihenfolge für den code nicht zu repetive:
EDIT :
Nehmen Sie im Verstand, den Sie cant definieren QueryTwoFields Methode innerhalb Taste handler. Sie müssen definieren, es außerhalb (siehe code oben).
Auch Definieren Sie Ihre Verbindungsdaten in das starten des Programms:
Datatables sind fantastisch
Mithilfe einer Daten-Tabelle ist eine schöne Art, das zu tun, Lesen und schreiben. Und es kommt mit dem Luxus von eveything, die Sie tun können, mit einem datatable - wie asssigning es direkt an ein datagrid-Steuerelement, das Sortieren, auswählen und löschen, während die Verbindung getrennt.
Das Beispiel unten setzt die MySqlConnection Verbindung-Eigenschaft verwaltet die Anrufe an Ihre eigenen OpenConnection() und CloseConnection () - Methoden nicht gezeigt.
Einfache datatable Lesen demo:
Im Falle des Schreibens zurück, die die datatable an das Datenbank - Versorgung der SQL, die Sie in das Lesen (oder verwendet haben würde, zu Lesen, um die Daten-Tabelle):
Die saubere Sache ist die datatable extrem flexibel. Sie können Ihre eigenen wählt gegen den Tisch, sobald es Daten enthält und vor dem schreiben zurück können Sie festlegen oder zurücksetzen, welche Zeilen aktualisiert werden muss und standardmäßig die datatable Spur hält, was die Zeilen, die Sie aktualisieren, in die Tabelle ein. Vergessen Sie nicht primary key-Spalte(N) für alle Tabellen in der db.
Für mehrere Abfragen berücksichtigen, wenn möglich mit einer Verknüpfung zwischen den Datenbank-Tabellen oder in derselben Tabelle, wenn die Daten im Zusammenhang oder Benutzung einer UNION-sql-syntax, wenn die Anzahl der Spalten und die Art der Daten ist die gleiche. Sie können immer auf "erstellen" Ihre zusätzliche Spalte in die select-zu unterscheiden, welche Daten von welchem Teil der UNION.
Berücksichtigen Sie auch die Verwendung FALL, WENN der sql-syntax bedingt wählen Sie Daten aus verschiedenen Quellen.
Load
Funktion der DataTable so weit. Sieht ziemlich genial. Noch mehr awesome, dass es eine Möglichkeit zum erzeugen des update-statements automatisch.DataTable
um eine benutzerdefinierteMysqlTable
das speichern derSELECT
Aussage, nachdem Sie die Ausgabe. Auf diese Weise, ich habe nur meinenMysqlTable
zu der update-Methode und Magie passiert. :D.