簡體   English   中英

C#從MySQL中的表格填充Visual Studio 2015中的dataTable

[英]C# populating dataTable in Visual Studio 2015 from table in MySQL

我正在使用Visual Studio 2015中的程序,該程序從MySQL中的表中提取數據。 我是SQL的新手,所以我可能會一起以錯誤的方式進行操作。 我需要的是基本上將表從MySQL模仿到C#應用程序中。 我創建了一個名為DataSet4的新數據集,其中有一個名為DataTable1的表。 該表有2列,即ID和Name。 現在,我的代碼(如下所示)僅從表中拉出第一行。 我將如何在其中添加一個foreach循環以從MySQL中提取所有行? 我希望我說得足夠清楚,否則我將盡我所能嘗試解釋。 除此之外,還有很多東西,但我覺得我可以從那里弄清楚。 我確實嘗試過建立一個直接拉表的數據集,但該數據集一直凍結着我的Visual Studio。

private void button7_Click(object sender, EventArgs e)
    {
        try
        {
            cnC03.Open();
            s = "SELECT * FROM c03.tbl_kit t;";
            mcd = new MySqlCommand(s, cnC03);
            mdr = mcd.ExecuteReader();


            if (mdr.Read())
            {
                DataRow newDataRow = dataSet4.Tables["DataTable1"].NewRow();
                newDataRow["ID"] = mdr.GetString("ID");
                newDataRow["Name"] = mdr.GetString("Name");

                dataSet4.Tables["DataTable1"].Rows.Add(newDataRow);
            }
            else
            {
                MessageBox.Show("No Data");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            mdr.Close();
            cnC03.Close();
        }
    }

新代碼:

private void button7_Click(object sender, EventArgs e)
    {
        try
        {
            s = "SELECT ID, Name FROM c03.tbl_kit";
            using (cnC03)
            using (MySqlCommand mcd2 = new MySqlCommand(s, cnC03))
            {
                cnC03.Open();
                using (MySqlDataReader mdr = mcd2.ExecuteReader())
                {
                    DataTable dt = new DataTable("DataTable1");
                    dt.Load(mdr);
                    dataSet4.Tables.Add(dt);


                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

如果您需要將查詢返回的所有數據加載到DataTable中,則可以使用以下方法大大縮短代碼

s = "SELECT ID, Name FROM c03.tbl_kit";
mcd = new MySqlCommand(s, cnC03);
mdr = mcd.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(mdr);

請參閱DataTable.Load上的 MSDN

請注意,如果只需要兩個字段,則應將輸出中所需的確切列名稱添加到查詢文本中。

在您的代碼中,我看到了潛在的問題。 您沒有MySqlConnection的局部變量。 這帶來了一個大問題,因為連接是一次性對象,應盡快創建,使用和處置。

我會寫這樣的東西

private void button7_Click(object sender, EventArgs e)
{
    try
    {
        s = "SELECT ID, Name FROM c03.tbl_kit";
        using(MySqlConnection cnn = new MySqlConnection(connectionstring))
        using(MySqlCommand mcd = new MySqlCommand(s, cnn))
        {
            cnC03.Open();
            using(MySqlDataReader mdr = mcd.ExecuteReader())
            {
                DataTable dt = new DataTable("DataTable1");
                dt.Load(mdr);            
                //.... use your table ....
                //.... or add it to the global dataset
                //.... of course this means that you haven't done it manually before
                dataSet4.Tables.Add(dt);


            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

}

暫無
暫無

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

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