欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)庫數(shù)據(jù)到Excel文件

 更新時(shí)間:2024年12月09日 15:37:16   作者:Eiceblue  
利用C#編程語言的強(qiáng)大特性和豐富的.NET庫支持,開發(fā)人員可以高效地完成從數(shù)據(jù)庫到Excel文件的數(shù)據(jù)遷移,下面就跟隨小編一起學(xué)習(xí)一下具體操作吧

隨著企業(yè)業(yè)務(wù)的增長和復(fù)雜性的增加,對(duì)數(shù)據(jù)進(jìn)行有效的分析、共享和報(bào)告變得至關(guān)重要;而Excel,作為一款廣泛接受的數(shù)據(jù)處理工具,提供了強(qiáng)大的計(jì)算能力、可視化選項(xiàng)以及與多種數(shù)據(jù)分析工具的兼容性,使得它成為從數(shù)據(jù)庫導(dǎo)出數(shù)據(jù)的理想選擇。通過利用C#編程語言的強(qiáng)大特性和豐富的.NET庫支持,開發(fā)人員不僅能夠高效地完成從數(shù)據(jù)庫到Excel文件的數(shù)據(jù)遷移,還可以根據(jù)特定業(yè)務(wù)邏輯定制導(dǎo)出過程,確保數(shù)據(jù)的準(zhǔn)確性和完整性,同時(shí)提升用戶體驗(yàn)并滿足不同用戶的報(bào)表需求。

本文將介紹如何在.NET平臺(tái)使用C#代碼導(dǎo)出數(shù)據(jù)庫數(shù)據(jù)到Excel文件。

本文所使用的方法需要用到,免費(fèi)的Free Spire.XLS for .NET,以及System.Data.SQLite和System.Data.OleDb。NuGet:

PM> Install-Package FreeSpire.XLS
PM> Install-Package System.Data.SQLite
PM> Install-Package System.Data.OleDb

導(dǎo)出SQLite數(shù)據(jù)庫到Excel文件

System.Data.SQLite模塊可以直接從SQLite數(shù)據(jù)庫文件中讀取數(shù)據(jù)。讀取到數(shù)據(jù)之后,我們可以使用Free Spire.XLS for .NET創(chuàng)建Excel文件并將數(shù)據(jù)寫入其中。以下是操作步驟及代碼示例:

1.定義文件路徑

  • 設(shè)置SQLite數(shù)據(jù)庫文件路徑為Sample.db。
  • 設(shè)置Excel輸出文件路徑為output/DatabaseToExcel.xlsx。

2.創(chuàng)建Excel工作簿實(shí)例

  • 創(chuàng)建一個(gè)新的Workbook實(shí)例以表示要導(dǎo)出的Excel文件。
  • 清除默認(rèn)包含的工作表,確保工作簿為空。

3.建立SQLite連接

  • 使用SQLiteConnection類創(chuàng)建一個(gè)到SQLite數(shù)據(jù)庫的新連接,并通過提供數(shù)據(jù)源和版本號(hào)來初始化連接字符串。
  • 打開與SQLite數(shù)據(jù)庫的連接。

4.獲取數(shù)據(jù)庫中的所有表名

通過調(diào)用GetSchema("Tables")方法從數(shù)據(jù)庫中獲取所有表的名字,并將結(jié)果存儲(chǔ)在一個(gè)DataTable對(duì)象中。

5.遍歷每個(gè)表并處理

  • 遍歷DataTable對(duì)象中的每一行,提取表名。
  • 對(duì)于每個(gè)表,添加一個(gè)新的工作表到Excel工作簿中,并將工作表命名為對(duì)應(yīng)的表名。

6.讀取表數(shù)據(jù)并寫入Excel

構(gòu)建SQL查詢語句以選擇當(dāng)前表中的所有數(shù)據(jù),并使用SQLiteCommand執(zhí)行此查詢。

使用SQLiteDataReader讀取查詢結(jié)果:

  • 獲取列名并將它們寫入新工作表的第一行。
  • 設(shè)置第一行(即標(biāo)題行)的字體樣式為粗體,字號(hào)為12。
  • 遍歷數(shù)據(jù)行,將每一行的數(shù)據(jù)值寫入相應(yīng)的單元格中,同時(shí)自動(dòng)調(diào)整每列的寬度以適應(yīng)內(nèi)容。
  • 設(shè)置數(shù)據(jù)行的字體大小為11。

7.關(guān)閉數(shù)據(jù)庫連接

完成所有表的數(shù)據(jù)讀取和寫入后,關(guān)閉與SQLite數(shù)據(jù)庫的連接。

8.保存Excel文件

將生成的工作簿保存到之前定義的Excel文件路徑。

釋放workbook對(duì)象使用的資源。

代碼示例

using System.Data;
using System.Data.SQLite;
using Spire.Xls;

namespace SQLiteToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // SQLite數(shù)據(jù)庫路徑
            string sqliteFilePath = "Sample.db";

            // Excel文件路徑
            string excelFilePath = "output/DatabaseToExcel.xlsx";

            // 創(chuàng)建一個(gè)新的工作簿實(shí)例
            Workbook workbook = new Workbook();
            // 清除默認(rèn)的工作表
            workbook.Worksheets.Clear();

            // 創(chuàng)建SQLite連接
            using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;"))
            {
                connection.Open();

                // 獲取所有表名
                DataTable tables = connection.GetSchema("Tables");

                // 遍歷每個(gè)表
                foreach (DataRow tableRow in tables.Rows)
                {
                    string tableName = tableRow["TABLE_NAME"].ToString();

                    // 創(chuàng)建一個(gè)新的工作表
                    Worksheet sheet = workbook.Worksheets.Add(tableName);

                    // 獲取表數(shù)據(jù)
                    string selectQuery = $"SELECT * FROM [{tableName}]";
                    using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection))
                    {
                        using (SQLiteDataReader reader = command.ExecuteReader())
                        {
                            // 獲取列名并寫入第一行
                            for (int col = 0; col < reader.FieldCount; col++)
                            {
                                sheet.Range[1, col + 1].Value = reader.GetName(col);
                            }
                            // 設(shè)置標(biāo)題行的字體樣式
                            sheet.Rows[0].Style.Font.IsBold = true;
                            sheet.Rows[0].Style.Font.Size = 12;

                            // 寫入數(shù)據(jù)行
                            int rowIndex = 2;
                            while (reader.Read())
                            {
                                for (int col = 0; col < reader.FieldCount; col++)
                                {
                                    sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col).ToString();
                                    // 自動(dòng)調(diào)整列寬
                                    sheet.AutoFitColumn(col + 1);
                                }
                                // 設(shè)置數(shù)據(jù)行的字體樣式
                                sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
                                rowIndex++;
                            }
                        }
                    }
                }

                connection.Close();
            }

            // 保存Excel文件
            workbook.SaveToFile(excelFilePath);
            workbook.Dispose();
            Console.WriteLine("數(shù)據(jù)已成功導(dǎo)出到Excel文件!");
        }
    }
}

結(jié)果
 

導(dǎo)出Access數(shù)據(jù)庫到Excel文件

System.Data.OleDb可以直接讀取Access數(shù)據(jù)庫中的數(shù)據(jù),我們可以使用同樣的方法來導(dǎo)出Access數(shù)據(jù)庫到Excel文件。以下是操作步驟及代碼示例:
以下是將提供的C#代碼轉(zhuǎn)換為操作步驟的介紹,用于將Access數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出到Excel文件:

1.定義文件路徑

  • 設(shè)置Access數(shù)據(jù)庫文件路徑為Database.accdb。
  • 設(shè)置Excel輸出文件路徑為output/DatabaseToExcel.xlsx。

2.創(chuàng)建Excel工作簿實(shí)例

  • 創(chuàng)建一個(gè)新的Workbook實(shí)例以表示要導(dǎo)出的Excel文件。
  • 清除默認(rèn)包含的工作表,確保工作簿為空。

3.定義連接字符串

定義一個(gè)連接字符串,用于連接到指定路徑的Access數(shù)據(jù)庫。這里使用的是Microsoft.ACE.OLEDB.12.0提供程序,并指定了不持久化安全信息。

4.建立OleDb連接

使用OleDbConnection類創(chuàng)建一個(gè)新的連接對(duì)象,并通過調(diào)用Open()方法打開與Access數(shù)據(jù)庫的連接。

5.獲取所有表名

通過調(diào)用GetSchema("Tables")方法從數(shù)據(jù)庫中獲取所有表的名字,并將結(jié)果存儲(chǔ)在一個(gè)DataTable對(duì)象中。

6.遍歷每個(gè)表并處理(跳過系統(tǒng)表)

  • 遍歷DataTable對(duì)象中的每一行,提取表名。
  • 跳過非用戶定義的表(例如,系統(tǒng)表)。這一步可以通過檢查TABLE_TYPE列來完成,只處理類型為TABLE的表。
  • 對(duì)于每個(gè)用戶定義的表,添加一個(gè)新的工作表到Excel工作簿中,并將工作表命名為對(duì)應(yīng)的表名。

7.讀取表數(shù)據(jù)并寫入Excel

構(gòu)建SQL查詢語句以選擇當(dāng)前表中的所有數(shù)據(jù),并使用OleDbCommand執(zhí)行此查詢。

使用OleDbDataReader讀取查詢結(jié)果:

  • 獲取列名并將它們寫入新工作表的第一行。
  • 設(shè)置第一行(即標(biāo)題行)的字體樣式為粗體,字號(hào)為12。
  • 遍歷數(shù)據(jù)行,將每一行的數(shù)據(jù)值寫入相應(yīng)的單元格中,同時(shí)自動(dòng)調(diào)整每列的寬度以適應(yīng)內(nèi)容。
  • 設(shè)置數(shù)據(jù)行的字體大小為11。

8.關(guān)閉數(shù)據(jù)庫連接

完成所有表的數(shù)據(jù)讀取和寫入后,關(guān)閉與Access數(shù)據(jù)庫的連接。

9.保存Excel文件

將生成的工作簿保存到之前定義的Excel文件路徑。

釋放workbook對(duì)象使用的資源。

代碼實(shí)例

using System.Data;
using System.Data.OleDb;
using Spire.Xls;

namespace AccessToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // Access數(shù)據(jù)庫路徑
            string accessFilePath = "Database.accdb";

            // Excel文件路徑
            string excelFilePath = "output/DatabaseToExcel.xlsx";

            // 創(chuàng)建一個(gè)新的工作簿實(shí)例
            Workbook workbook = new Workbook();
            // 清除默認(rèn)的工作表
            workbook.Worksheets.Clear();

            // 定義Access數(shù)據(jù)庫的連接字符串
            string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={accessFilePath};Persist Security Info=False;";

            // 創(chuàng)建OleDb連接
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                connection.Open();

                // 獲取所有表名
                DataTable tables = connection.GetSchema("Tables");

                // 遍歷每個(gè)表
                foreach (DataRow tableRow in tables.Rows)
                {
                    // 跳過系統(tǒng)表,您可以在這里添加更多條件
                    if (tableRow["TABLE_TYPE"].ToString() != "TABLE") continue;

                    string tableName = tableRow["TABLE_NAME"].ToString();

                    // 創(chuàng)建一個(gè)新的工作表
                    Worksheet sheet = workbook.Worksheets.Add(tableName);

                    // 獲取表數(shù)據(jù)
                    string selectQuery = $"SELECT * FROM [{tableName}]";
                    using (OleDbCommand command = new OleDbCommand(selectQuery, connection))
                    {
                        using (OleDbDataReader reader = command.ExecuteReader())
                        {
                            // 獲取列名并寫入第一行
                            for (int col = 0; col < reader.FieldCount; col++)
                            {
                                sheet.Range[1, col + 1].Value = reader.GetName(col);
                            }
                            // 設(shè)置標(biāo)題行的字體樣式
                            sheet.Rows[0].Style.Font.IsBold = true;
                            sheet.Rows[0].Style.Font.Size = 12;

                            // 寫入數(shù)據(jù)行
                            int rowIndex = 2;
                            while (reader.Read())
                            {
                                for (int col = 0; col < reader.FieldCount; col++)
                                {
                                    sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col)?.ToString() ?? "";
                                    // 自動(dòng)調(diào)整列寬
                                    sheet.AutoFitColumn(col + 1);
                                }
                                // 設(shè)置數(shù)據(jù)行的字體樣式
                                sheet.Rows[rowIndex - 1].Style.Font.Size = 11;
                                rowIndex++;
                            }
                        }
                    }
                }

                connection.Close();
            }

            // 保存Excel文件
            workbook.SaveToFile(excelFilePath);
            workbook.Dispose();
            Console.WriteLine("數(shù)據(jù)已成功導(dǎo)出到Excel文件!");
        }
    }
}

結(jié)果

以上就是C#實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)庫數(shù)據(jù)到Excel文件的詳細(xì)內(nèi)容,更多關(guān)于C#數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出至Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • RandomId生成隨機(jī)字符串詳解實(shí)例

    RandomId生成隨機(jī)字符串詳解實(shí)例

    本文主要介紹RandomId 生成隨機(jī)字符串的方法,大家參考使用吧
    2013-12-12
  • C#凈化版WebApi框架的實(shí)現(xiàn)

    C#凈化版WebApi框架的實(shí)現(xiàn)

    這篇文章主要介紹了C#凈化版WebApi框架的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • 使用C#實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)堆的代碼

    使用C#實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)堆的代碼

    這篇文章主要介紹了使用C#實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)堆,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • C# 變量作用域常用說明小結(jié)

    C# 變量作用域常用說明小結(jié)

    在C#編程中,變量作用域是一個(gè)重要概念,指的是變量在何處被定義和可以訪問的范圍,正確理解和使用變量作用域有助于提升代碼的可讀性和避免潛在的錯(cuò)誤,感興趣的可以了解一下
    2024-10-10
  • 親自教你實(shí)現(xiàn)棧及C#中Stack源碼分析

    親自教你實(shí)現(xiàn)棧及C#中Stack源碼分析

    大家都知道棧的實(shí)現(xiàn)方式有兩種,一種是基于數(shù)組實(shí)現(xiàn)的順序棧,另一種是基于鏈表實(shí)現(xiàn)的鏈?zhǔn)綏!_@篇文章主要介紹了手把手教你實(shí)現(xiàn)棧以及C#中Stack源碼分析,需要的朋友可以參考下
    2021-09-09
  • C# Oracle數(shù)據(jù)庫操作類實(shí)例詳解

    C# Oracle數(shù)據(jù)庫操作類實(shí)例詳解

    這篇文章主要介紹了C# Oracle數(shù)據(jù)庫操作類實(shí)例,進(jìn)行數(shù)據(jù)庫操作時(shí)很有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-07-07
  • WPF中窗體最大化問題的解決方法

    WPF中窗體最大化問題的解決方法

    這篇文章主要給大家介紹了關(guān)于WPF中窗體最大化問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用wpf具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • C#彩色圖片灰度化算法實(shí)例

    C#彩色圖片灰度化算法實(shí)例

    這篇文章主要介紹了C#彩色圖片灰度化算法,以實(shí)例形式對(duì)灰度化算法進(jìn)行了較為詳細(xì)的介紹,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#實(shí)現(xiàn)DevExpress本地化實(shí)例詳解

    C#實(shí)現(xiàn)DevExpress本地化實(shí)例詳解

    這篇文章主要介紹了C#實(shí)現(xiàn)DevExpress本地化,以實(shí)例形式較為詳細(xì)的分析了DevExpress本地化的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#實(shí)現(xiàn)多選項(xiàng)卡的瀏覽器控件

    C#實(shí)現(xiàn)多選項(xiàng)卡的瀏覽器控件

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)多選項(xiàng)卡的瀏覽器控件的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評(píng)論