亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

導入Excel數(shù)據(jù)到SQLite數(shù)據(jù)庫

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

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

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

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

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

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

5.遍歷每個表名:

對于每個表,添加一個新的工作表到工作簿中,工作表名稱設(shè)為當前表名。

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

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

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

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

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

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

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

代碼示例:

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ù)庫路徑
            string sqliteFilePath = "output/Database.db";

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

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

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

                // 遍歷每個工作表
                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++) // 跳過第一行
                    {
                        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ù)已成功寫入新的 SQLite 數(shù)據(jù)庫!");
        }
    }
}

結(jié)果

導入Excel數(shù)據(jù)到SQLite數(shù)據(jù)庫

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

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

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

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

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

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

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

6.遍歷Excel工作簿中的每個工作表:

獲取當前工作表的名稱,并將其作為新表的名稱。

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

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

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

9.對于每個工作表中的每一行數(shù)據(jù)(跳過第一行,因為它包含列名):

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

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

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

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

代碼示例:

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ù)庫路徑
            string accessDbPath = "output/Database.accdb";

            // 打開 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ù)庫文件不存在,提示創(chuàng)建 - 注意:此步驟通常在代碼外部完成
            if (!System.IO.File.Exists(accessDbPath))
            {
                Console.WriteLine("請先創(chuàng)建一個 Access 數(shù)據(jù)庫文件。");
                return;
            }

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

                // 遍歷每個工作表
                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è)所有列都是文本類型
                    }
                    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++) // 跳過第一行
                        {
                            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} 時發(fā)生錯誤:{ex.Message}");
                    }
                }

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

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

結(jié)果

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

相關(guān)文章

  • C#利用反射來判斷對象是否包含某個屬性的實現(xiàn)方法

    C#利用反射來判斷對象是否包含某個屬性的實現(xiàn)方法

    這篇文章主要介紹了C#利用反射來判斷對象是否包含某個屬性的實現(xiàn)方法,很有借鑒價值的一個技巧,需要的朋友可以參考下
    2014-08-08
  • C#圖像處理之頭發(fā)檢測的方法

    C#圖像處理之頭發(fā)檢測的方法

    這篇文章主要介紹了C#圖像處理之頭發(fā)檢測的方法,可實現(xiàn)針對圖像中頭發(fā)的檢測功能,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#中String與string的區(qū)別分析

    C#中String與string的區(qū)別分析

    這篇文章主要介紹了C#中String與string的區(qū)別,對于加深C#數(shù)據(jù)類型與類的理解有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C#實現(xiàn)裝箱與拆箱操作簡單實例

    C#實現(xiàn)裝箱與拆箱操作簡單實例

    這篇文章主要介紹了C#實現(xiàn)裝箱與拆箱操作,對于新手理解裝箱與拆箱有一定的幫助,需要的朋友可以參考下
    2014-07-07
  • C#中IEnumerable接口用法實例分析

    C#中IEnumerable接口用法實例分析

    這篇文章主要介紹了C#中IEnumerable接口用法,實例分析了IEnumerable接口的功能與使用技巧,需要的朋友可以參考下
    2015-04-04
  • 新手小白用C# winform 讀取Excel表的實現(xiàn)

    新手小白用C# winform 讀取Excel表的實現(xiàn)

    這篇文章主要介紹了新手小白用C# winform 讀取Excel表的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C#求解哈夫曼樹,實例代碼

    C#求解哈夫曼樹,實例代碼

    C#求解哈夫曼樹,實例代碼,需要的朋友可以參考一下
    2013-04-04
  • C#中跨線程訪問控件的實現(xiàn)方法

    C#中跨線程訪問控件的實現(xiàn)方法

    C#中不允許跨線程直接訪問界面控件,即一個線程中如主線程創(chuàng)建的控件不允許被其他線程例如子線程直接訪問,在一個線程中設(shè)置其他線程所有的控件屬性通常有兩種方法,本文將詳細的給大家介紹一下,需要的朋友可以參考下
    2024-12-12
  • C#解析json字符串總是多出雙引號的原因分析及解決辦法

    C#解析json字符串總是多出雙引號的原因分析及解決辦法

    json好久沒用了,今天在用到j(luò)son的時候,發(fā)現(xiàn)對字符串做解析的時候總是多出雙引號,下面給大家介紹C#解析json字符串總是多出雙引號的原因分析及解決辦法,需要的朋友參考下吧
    2016-03-03
  • C#解析char型指針所指向的內(nèi)容(實例解析)

    C#解析char型指針所指向的內(nèi)容(實例解析)

    在c++代碼中定義了一個功能函數(shù),這個功能函數(shù)會將計算的結(jié)果寫入一個字符串型的數(shù)組中output,然后c#會調(diào)用c++導出的dll中的接口函數(shù),然后獲取這個output并解析成string類型,本文通過實例解析C#?char型指針所指向的內(nèi)容,感興趣的朋友一起看看吧
    2024-03-03

最新評論