簡體   English   中英

在C#中使用數據庫需要一些幫助

[英]Need some help working with databases in C#

我有一個包含兩個表的數據庫。 這兩個表都是相關的,並且具有相同的關鍵字段。 例如,它們都具有對應於ISBN = 12345的數據行,但是這兩個表具有關於該ISBN的不同數據。

所以,我試圖弄清楚如何將兩個表中的數據顯示到一個dataGridView中。 我嘗試過在網上找到的一些SQL命令,但看起來C#中的命令可能與普通的SQL查詢不同。

假設table1具有以下字段:ISBN,顏色,大小和table2具有ISBN,weight字段。

我需要一種在數據網格視圖中顯示ISBN,顏色,大小,重量的方法。 我想我必須以某種方式用適配器來做這件事。 我可以單獨連接並對表進行查詢,並在我的datagridview中顯示數據,但我無法弄清楚如何混合來自兩個單獨表的數據。

如果你有一個很好的資源我可以讀到這個我很想擁有它,我的google-fu讓我失望。

這是我現在可以使用我的數據庫做的一個例子:

    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];
    }

所以,基本上,我想做我上面所做的事情,但我也希望包含來自不同表格的數據。 另一個表還有一個關鍵字段ISBN,它包含與第一個表匹配的ISBN值。

查看JOIN的使用,將兩個表中的結果JOIN ed一起返回ON一些常用值

也可以看看

這對C#或OLEDB沒有任何限制 - 它是基本的SQL。


對於您要求查詢的具體細節,可能如下所示:

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

(不需要將table1 別名為T1 - 我只是將其作為示例;在具有較長表名的更復雜查詢中,您可能不希望一直重復表名)

  • 由於ISBN出現在兩個表中,因此必須在字段選擇中明確限定; 可以使用T1或T2,因為它們是相同的
  • 因為顏色,尺寸和重量都只出現在一張桌子上,所以它們不需要合格 - 但它不會受到傷害。
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();

這是眾多解決方案之一。 我認為如果您創建內存中的DataTable並使用SqlDataReader,代碼可能會更快,但上面的示例更簡單。

使用MSSQL數據庫時,通常使用System.Data.SqlClient類。 如果您 - 無論出於何種原因 - 使用OleDb,請從System.Data.OleDb命名空間中選擇相應的對象。

您可以使用UNION ALL查詢兩個表中的記錄

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'

當然,您需要使用在您的情況下更方便的任何方法在兩個地方手動填充'67890'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM