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

.NET使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫(kù)

 更新時(shí)間:2024年12月09日 09:08:26   作者:Eiceblue  
將Excel文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中不僅能夠提升數(shù)據(jù)處理的效率和準(zhǔn)確性,還能極大地促進(jìn)數(shù)據(jù)分析和決策制定的過(guò)程,本文將介紹如何在.NET平臺(tái)使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫(kù)中,需要的可以參考下

將Excel文件中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)中不僅能夠提升數(shù)據(jù)處理的效率和準(zhǔn)確性,還能極大地促進(jìn)數(shù)據(jù)分析和決策制定的過(guò)程。尤其在企業(yè)級(jí)應(yīng)用中,Excel作為數(shù)據(jù)輸入和初步整理的工具非常普遍,但其功能對(duì)于復(fù)雜查詢、大規(guī)模數(shù)據(jù)管理和跨部門(mén)的數(shù)據(jù)共享來(lái)說(shuō)有所局限。通過(guò)使用C#在.NET平臺(tái)上實(shí)現(xiàn)這一過(guò)程,可以充分利用其強(qiáng)大的數(shù)據(jù)操作能力和豐富的庫(kù)支持,確保數(shù)據(jù)從Excel無(wú)縫遷移到諸如SQLite等關(guān)系型數(shù)據(jù)庫(kù)中,從而實(shí)現(xiàn)更高效的數(shù)據(jù)管理、增強(qiáng)的數(shù)據(jù)安全性和更好的性能優(yōu)化,同時(shí)為后續(xù)的數(shù)據(jù)挖掘和商業(yè)智能分析打下堅(jiān)實(shí)的基礎(chǔ)。

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

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

導(dǎo)入Excel數(shù)據(jù)到SQLite數(shù)據(jù)庫(kù)

我們可以使用Free Spire.XLS for .NET中的Workbook.LoadFromFile方法載入Excel文件,然后使用CellRange.Value讀取單元格的數(shù)據(jù),并搭配System.Data.SQLite模塊將數(shù)據(jù)寫(xiě)入到SQLite數(shù)據(jù)庫(kù)中。以下是操作步驟示例:

以下是將提供的C#代碼轉(zhuǎn)換為操作步驟的介紹:

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

2.創(chuàng)建一個(gè)新的Workbook實(shí)例以表示Excel工作簿,并清除默認(rèn)的工作表。

3.使用SQLiteConnection創(chuàng)建一個(gè)到SQLite數(shù)據(jù)庫(kù)的新連接,并打開(kāi)這個(gè)連接。

4.通過(guò)調(diào)用GetSchema("Tables")從數(shù)據(jù)庫(kù)獲取所有表的名字,并存儲(chǔ)在一個(gè)DataTable對(duì)象中。

5.遍歷每個(gè)表名:

對(duì)于每個(gè)表,添加一個(gè)新的工作表到工作簿中,工作表名稱(chēng)設(shè)為當(dāng)前表名。

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

7.使用SQLiteDataReader讀取查詢結(jié)果,并進(jìn)行以下操作:

  • 獲取列名并將它們寫(xiě)入新工作表的第一行。
  • 設(shè)置第一行(即標(biāo)題行)的字體樣式為粗體,字號(hào)為12。

8.繼續(xù)遍歷數(shù)據(jù)行,并對(duì)每一行執(zhí)行以下操作:

  • 將每一行的數(shù)據(jù)值寫(xiě)入相應(yīng)的單元格中。
  • 自動(dòng)調(diào)整每列的寬度以適應(yīng)內(nèi)容。
  • 設(shè)置數(shù)據(jù)行的字體大小為11。

9.關(guān)閉與SQLite數(shù)據(jù)庫(kù)的連接。

10.保存生成的工作簿到之前定義的Excel文件路徑,并釋放workbook對(duì)象使用的資源。

代碼示例:

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

namespace ExcelToSQLite
{
    class Program
    {
        static void Main(string[] args)
        {
            // Excel 文件路徑
            string excelFilePath = "G:/Documents/Sample37.xlsx";

            // SQLite 數(shù)據(jù)庫(kù)路徑
            string sqliteFilePath = "output/Database.db";

            // 打開(kāi) Excel 文件
            Workbook workbook = new Workbook();
            workbook.LoadFromFile(excelFilePath);

            // 如果數(shù)據(jù)庫(kù)文件不存在,則創(chuàng)建它
            if (!File.Exists(sqliteFilePath))
            {
                SQLiteConnection.CreateFile(sqliteFilePath);
                Console.WriteLine("已創(chuàng)建新的 SQLite 數(shù)據(jù)庫(kù)文件:output.db");
            }

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

                // 遍歷每個(gè)工作表
                foreach (Worksheet sheet in workbook.Worksheets)
                {
                    string tableName = sheet.Name;

                    // 獲取第一行作為列名
                    var columns = sheet.Rows[0].CellList;
                    string createTableQuery = $"CREATE TABLE IF NOT EXISTS [{tableName}] (";

                    foreach (var column in columns)
                    {
                        createTableQuery += $"[{column.Value}] TEXT,";
                    }
                    createTableQuery = createTableQuery.TrimEnd(',') + ");";

                    // 創(chuàng)建表
                    using (SQLiteCommand createTableCommand = new SQLiteCommand(createTableQuery, connection))
                    {
                        createTableCommand.ExecuteNonQuery();
                    }

                    // 插入數(shù)據(jù)
                    for (int i = 1; i < sheet.Rows.Length; i++) // 跳過(guò)第一行
                    {
                        var row = sheet.Rows[i];
                        string insertQuery = $"INSERT INTO [{tableName}] VALUES (";
                        foreach (var cell in row.CellList)
                        {
                            insertQuery += $"'{cell.Value?.Replace("'", "''")}',"; // 防止 SQL 注入
                        }
                        insertQuery = insertQuery.TrimEnd(',') + ");";

                        using (SQLiteCommand insertCommand = new SQLiteCommand(insertQuery, connection))
                        {
                            insertCommand.ExecuteNonQuery();
                        }
                    }
                }

                connection.Close();
                workbook.Dispose();
            }

            Console.WriteLine("Excel 數(shù)據(jù)已成功寫(xiě)入新的 SQLite 數(shù)據(jù)庫(kù)!");
        }
    }
}

結(jié)果

導(dǎo)入Excel數(shù)據(jù)到SQLite數(shù)據(jù)庫(kù)

寫(xiě)入到Access數(shù)據(jù)庫(kù)則需要用到System.Data.OleDb模塊,以下是操作步驟示例:

以下是將提供的C#代碼轉(zhuǎn)換為操作步驟的介紹:

1.設(shè)置Excel文件路徑為Sample.xlsx,并指定Access數(shù)據(jù)庫(kù)文件路徑為output/Database.accdb。

2.使用Workbook類(lèi)打開(kāi)指定路徑的Excel文件,并加載該文件到內(nèi)存中。

3.創(chuàng)建一個(gè)用于連接Access數(shù)據(jù)庫(kù)的OleDb連接字符串。

4.檢查Access數(shù)據(jù)庫(kù)文件是否存在。如果不存在,則提示用戶首先創(chuàng)建Access數(shù)據(jù)庫(kù)文件,并終止程序執(zhí)行。

5.創(chuàng)建一個(gè)新的OleDb連接對(duì)象,并打開(kāi)與Access數(shù)據(jù)庫(kù)的連接。

6.遍歷Excel工作簿中的每個(gè)工作表:

獲取當(dāng)前工作表的名稱(chēng),并將其作為新表的名稱(chēng)。

7.從工作表的第一行獲取列名,并構(gòu)建創(chuàng)建新表的SQL語(yǔ)句,假定所有列的數(shù)據(jù)類(lèi)型均為文本類(lèi)型(TEXT)。

8.嘗試執(zhí)行以下操作,對(duì)于每個(gè)工作表:

使用構(gòu)建的CREATE TABLE SQL語(yǔ)句創(chuàng)建新的表。

9.對(duì)于每個(gè)工作表中的每一行數(shù)據(jù)(跳過(guò)第一行,因?yàn)樗忻?/p>

構(gòu)建INSERT INTO SQL語(yǔ)句以插入數(shù)據(jù)行,同時(shí)處理可能的SQL注入問(wèn)題,例如通過(guò)轉(zhuǎn)義單引號(hào)。

10.執(zhí)行構(gòu)建的INSERT INTO命令,將一行數(shù)據(jù)插入到對(duì)應(yīng)的Access表中。

11.如果在處理某個(gè)工作表時(shí)發(fā)生錯(cuò)誤,捕獲異常并打印錯(cuò)誤信息,繼續(xù)處理下一個(gè)工作表。

12.關(guān)閉與Access數(shù)據(jù)庫(kù)的連接,并釋放workbook對(duì)象使用的資源。

代碼示例:

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

namespace ExcelToAccess
{
    class Program
    {
        static void Main(string[] args)
        {
            // Excel 文件路徑
            string excelFilePath = "G:/Documents/Sample37.xlsx";

            // Access 數(shù)據(jù)庫(kù)路徑
            string accessDbPath = "output/Database.accdb";

            // 打開(kāi) Excel 文件
            Workbook workbook = new Workbook();
            workbook.LoadFromFile(excelFilePath);

            // 為 Access 創(chuàng)建 OleDb 連接字符串
            string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={accessDbPath};Persist Security Info=False;";

            // 如果數(shù)據(jù)庫(kù)文件不存在,提示創(chuàng)建 - 注意:此步驟通常在代碼外部完成
            if (!System.IO.File.Exists(accessDbPath))
            {
                Console.WriteLine("請(qǐng)先創(chuàng)建一個(gè) Access 數(shù)據(jù)庫(kù)文件。");
                return;
            }

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

                // 遍歷每個(gè)工作表
                foreach (Worksheet sheet in workbook.Worksheets)
                {
                    string tableName = sheet.Name;

                    // 獲取第一行作為列名
                    var columns = sheet.Rows[0].CellList;
                    string createTableQuery = $"CREATE TABLE [{tableName}] (";

                    foreach (var column in columns)
                    {
                        createTableQuery += $"[{column.Value}] TEXT,"; // 假設(shè)所有列都是文本類(lèi)型
                    }
                    createTableQuery = createTableQuery.TrimEnd(',') + ");";

                    try
                    {
                        // 創(chuàng)建表
                        using (OleDbCommand createTableCommand = new OleDbCommand(createTableQuery, connection))
                        {
                            createTableCommand.ExecuteNonQuery();
                        }

                        // 插入數(shù)據(jù)
                        for (int i = 1; i < sheet.Rows.Length; i++) // 跳過(guò)第一行
                        {
                            var row = sheet.Rows[i];
                            string insertQuery = $"INSERT INTO [{tableName}] VALUES (";
                            foreach (var cell in row.CellList)
                            {
                                insertQuery += $"'{cell.Value?.Replace("'", "''")}',"; // 防止 SQL 注入
                            }
                            insertQuery = insertQuery.TrimEnd(',') + ");";

                            using (OleDbCommand insertCommand = new OleDbCommand(insertQuery, connection))
                            {
                                insertCommand.ExecuteNonQuery();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"處理工作表 {sheet.Name} 時(shí)發(fā)生錯(cuò)誤:{ex.Message}");
                    }
                }

                connection.Close();
                workbook.Dispose();
            }

            Console.WriteLine("Excel 數(shù)據(jù)已成功寫(xiě)入新的 Access 數(shù)據(jù)庫(kù)!");
        }
    }
}

結(jié)果

到此這篇關(guān)于.NET使用C#導(dǎo)入Excel文件數(shù)據(jù)到數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)C#導(dǎo)入Excel數(shù)據(jù)到數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

建昌县| 兴隆县| 历史| 固阳县| 德州市| 绥棱县| 嘉祥县| 屏南县| 内丘县| 璧山县| 罗平县| 蒲城县| 柳林县| 浮山县| 平乡县| 新源县| 新昌县| 青川县| 宜章县| 那坡县| 津南区| 鄯善县| 苍溪县| 香格里拉县| 廊坊市| 库尔勒市| 庆云县| 汪清县| 定陶县| 鹰潭市| 伊宁市| 衡阳县| 蚌埠市| 平乡县| 岐山县| 黄冈市| 饶河县| 牡丹江市| 柯坪县| 宣恩县| 盐边县|