最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

本文所使用的方法需要用到,免費的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

導出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工作簿實例

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

3.建立SQLite連接

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

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

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

5.遍歷每個表并處理

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

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

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

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

  • 獲取列名并將它們寫入新工作表的第一行。
  • 設(shè)置第一行(即標題行)的字體樣式為粗體,字號為12。
  • 遍歷數(shù)據(jù)行,將每一行的數(shù)據(jù)值寫入相應(yī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對象使用的資源。

代碼示例

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)建一個新的工作簿實例
            Workbook workbook = new Workbook();
            // 清除默認的工作表
            workbook.Worksheets.Clear();

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

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

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

                    // 創(chuàng)建一個新的工作表
                    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è)置標題行的字體樣式
                            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();
                                    // 自動調(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ù)已成功導出到Excel文件!");
        }
    }
}

結(jié)果
 

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

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

1.定義文件路徑

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

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

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

3.定義連接字符串

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

4.建立OleDb連接

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

5.獲取所有表名

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

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

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

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

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

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

  • 獲取列名并將它們寫入新工作表的第一行。
  • 設(shè)置第一行(即標題行)的字體樣式為粗體,字號為12。
  • 遍歷數(shù)據(jù)行,將每一行的數(shù)據(jù)值寫入相應(yī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對象使用的資源。

代碼實例

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)建一個新的工作簿實例
            Workbook workbook = new Workbook();
            // 清除默認的工作表
            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");

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

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

                    // 創(chuàng)建一個新的工作表
                    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è)置標題行的字體樣式
                            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() ?? "";
                                    // 自動調(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ù)已成功導出到Excel文件!");
        }
    }
}

結(jié)果

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

相關(guān)文章

最新評論

北票市| 惠安县| 缙云县| 洪湖市| 长乐市| 桃园市| 安康市| 宁远县| 泊头市| 保康县| 吉木乃县| 镇雄县| 宜丰县| 塔城市| 宁化县| 历史| 桐乡市| 益阳市| 三亚市| 马龙县| 马尔康县| 科技| 灵寿县| 锦州市| 民丰县| 澜沧| 澳门| 运城市| 沅陵县| 淮安市| 南华县| 剑川县| 蕉岭县| 额济纳旗| 晋中市| 米易县| 尖扎县| 铜梁县| 忻城县| 轮台县| 新乡市|