5 Stimmen

Brauche Hilfe bei der Arbeit mit Datenbanken in C#

Ich habe eine Datenbank mit zwei Tabellen. Beide Tabellen sind miteinander verbunden und haben das gleiche Schlüsselfeld. Beide Tabellen haben z. B. Datenzeilen, die der ISBN = 12345 entsprechen, aber die beiden Tabellen haben unterschiedliche Daten zu dieser ISBN.

Also, ich versuche, herauszufinden, wie man Daten aus beiden Tabellen in einem dataGridView anzeigen. Ich habe versucht, einige SQL-Befehle, die ich online gefunden, aber es sieht aus wie Befehle in C# könnte von normalen SQL-Abfragen unterscheiden.

Angenommen, Tabelle1 hat diese Felder: ISBN, Farbe, Größe und Tabelle2 hat die Felder ISBN, Gewicht.

Ich brauche eine Möglichkeit, ISBN, Farbe, Größe und Gewicht in meiner Datentabelle anzuzeigen. Ich denke, ich werde dies irgendwie mit einem Adapter tun müssen. Ich bin in der Lage zu verbinden und tun Abfragen auf die Tabellen einzeln, und zeigen, dass Daten in meinem datagridview, aber ich kann nicht herausfinden, wie man Daten aus zwei separaten Tabellen mischen.

Wenn Sie eine gute Quelle haben, die ich darüber lesen kann, würde ich sie gerne haben, meine Google-Fähigkeiten lassen mich im Stich.

Hier ist ein Beispiel für etwas, das ich jetzt mit meiner Datenbank machen kann:

    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'database1DataSet.Book' table. You can move, or remove it, as needed.
        this.bookTableAdapter.Fill(this.database1DataSet.Book);
        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + @"C:\Users\Geoff\Documents\cs 351\Database1.accdb" + ";Persist Security Info=False;";
        OleDbConnection conn = new OleDbConnection(connectionString);
        string query = "select * from Book where ISBN = 12345";
        OleDbCommand com = conn.CreateCommand();
        com.CommandText = query;
        OleDbDataAdapter adapter = new OleDbDataAdapter(com);
        DataSet data = new DataSet();
        conn.Open();
        adapter.Fill(data);

        conn.Close();
        dataGridView1.DataSource = data.Tables[0];
    }

Ich möchte also im Wesentlichen das tun, was ich oben getan habe, aber ich möchte auch die Daten aus einer anderen Tabelle einbeziehen. Die andere Tabelle hat ebenfalls ein Schlüsselfeld ISBN und enthält ISBN-Werte, die mit denen der ersten Tabelle übereinstimmen.

3voto

Michael Paulukonis Punkte 8760

Prüfen Sie die Verwendung von JOIN um die Ergebnisse aus zwei Tabellen zurückzugeben JOIN zusammen ON ein gemeinsamer Wert

Siehe auch

Es gibt keine Beschränkung auf C# oder OLEDB - es handelt sich um einfaches SQL.


Für Ihre konkrete Frage könnte eine Abfrage folgendermaßen aussehen:

SELECT T1.ISBN, T1.color, T1.size, T2.weight
FROM table1 T1
  INNER JOIN table2 T2
    ON T1.ISBN = T2.ISBN
WHERE ISBN = '12345';

(Es besteht keine Notwendigkeit, die alias table1 als T1 -- ich habe das nur als Beispiel gemacht; bei komplizierteren Abfragen mit längeren Tabellennamen möchten Sie den Tabellennamen vielleicht nicht immer wiederholen)

  • da ISBN in beiden Tabellen vorkommt, muss es in Ihren Feldauswahlen explizit qualifiziert werden; es kann entweder T1 oder T2 verwendet werden, da sie identisch sind
  • Da Farbe, Größe und Gewicht jeweils nur in einer Tabelle vorkommen, müssen sie NICHT qualifiziert werden - aber es kann nicht schaden.

1voto

KBoek Punkte 5225
var query       = "SELECT t1.isbn, t1.color, t1.size, t2.weight FROM table1 t1 JOIN table2 t2 ON t2.isbn = t1.isbn";
var connection  = new System.Data.SqlClient.SqlConnection("your SQL connection string here");
var dataAdapter = new System.Data.SqlClient.SqlDataAdapter(query, connection);
var dataSet     = new System.Data.DataSet();

dataAdapter.Fill(dataSet);

yourGridView.DataSource = dataSet;
yourGridView.DataBind();

Dies ist eine von vielen Lösungen. Ich denke, der Code könnte schneller sein, wenn Sie eine speicherinterne DataTable erstellen und einen SqlDataReader verwenden, aber das obige Beispiel ist einfacher.

Wenn Sie mit MSSQL-Datenbanken arbeiten, verwenden Sie normalerweise die System.Data.SqlClient-Klassen. Wenn Sie - aus welchen Gründen auch immer - OleDb verwenden, wählen Sie die entsprechenden Objekte aus dem Namensraum System.Data.OleDb.

0voto

dschulz Punkte 4476

Sie können Datensätze aus beiden Tabellen mit UNION ALL abfragen

SELECT 'In table 1', book_author, book_title, book_isbn 
FROM books
WHERE book_isbn = '67890' 
UNION ALL
SELECT 'In table 2', othertable_author, othertable_title, othertable_isbn 
FROM othertable
WHERE othertable_isbn = '67890'

Natürlich müssen Sie die "67890" an beiden Stellen manuell eingeben, je nachdem, welche Methode in Ihrer Situation am besten geeignet ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X