簡體   English   中英

將csv文件/ excel導入sql數據庫asp.net

[英]import csv file/excel into sql database asp.net

我正在使用c#啟動asp.net visual studio 2008 / SQL 2000(將來的2005)項目。

對我來說棘手的部分是現有的數據庫模式經常更改,導入文件列都必須與現有的數據庫模式匹配,因為它們可能不是列名稱上的一對一匹配。 (有一個查找表,它提供了我將使用的列名稱的表模式)

我正在探索不同的方法來解決這個問題,需要一些專家建議。 是否有任何現有的控件或框架可用於執行此操作?

到目前為止,我探索了FileUpload .NET控件,以及一些第三方上傳控件來完成上傳,如SlickUpload,但上傳的文件應<500mb

下一部分是讀取我的csv / excel並解析它以顯示給用戶,以便它們可以與我們的db模式匹配。 我看過CSVReader和其他人,但是因為我需要支持不同的版本,所以更難以實現。

實質上執行此導入的用戶將從此導入文件中插入和/或更新多個表。 還有其他更先進的要求,如記錄匹配,但預覽導入記錄,但我希望首先了解如何執行此操作。

更新:我最終使用csvReader和LumenWorks.Framework上傳csv文件。

查看優秀的FileHelpers庫 - 有一篇關於它的CodeProject文章 ,它在這里托管。

它是純粹的C#,它可以導入任何平面文件,CSV,它也可以處理Excel。 導入是完全可配置的 - 您可以定義要跳過的分隔符,行和/或列等內容 - 許多選項。

我已成功地在各種項目中使用它,它只是完美無缺 - 非常值得推薦。

您可以輕松地在Excel或CSV文件上創建IDataReader(請參閱http://support.microsoft.com/kb/316934 )。

您使用SQL Server作為數據庫引擎嗎? 如果是這樣,您可以使用SqlBulkCopy類( http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx )有效地獲取IDataReader,根據需要映射列,並存儲結果在您的數據庫中。

我懷疑可能存在一些強大而靈活的工具來幫助您處理這個可能非常復雜的應用程序,希望有人能指出這一點。

同時,這里有一個我發現有用的功能可以將excel文件轉換為DataTable。 此版本僅查找第一個工作表。 它可以作為一個起點。 要與csv文件類似,只需要修改連接字符串。

public static DataTable GetDataTableFromExcel(string SourceFilePath)
{
    string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                                "Data Source=" + SourceFilePath + ";" +
                                "Extended Properties=Excel 8.0;";

    using (OleDbConnection cn = new OleDbConnection(ConnectionString))
    {
        cn.Open();

        DataTable dbSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        if (dbSchema == null || dbSchema.Rows.Count < 1)
        {
            throw new Exception("Error: Could not determine the name of the first worksheet.");
        }

        string WorkSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString();

        OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + WorkSheetName + "]", cn);
        DataTable dt = new DataTable(WorkSheetName);

        da.Fill(dt);

        return dt;
    }
}

我正在使用LumenWorks.Framework中的csvReader將csv文件上傳和導入到sql表和內存中的DataTable,這是我根據導入的列創建的。

我還讓用戶映射ui中的字段,並通過將每個記錄標記為插入/更新/錯誤來繼續驗證和准備要導入的數據。 然后,我為每個將受影響的表創建/填充強類型DataSet,並為Enterprise Library UpdateDataset()方法構建插入/更新查詢。

然后我提交事務來插入/更新數據庫。 -

映射是一個包含4列的網格。 (導入字段名稱,目標表,目標字段名稱,忽略,匹配狀態),目標表和字段名稱選擇基於所選表的刷新。 我動態填充選擇。 如果找到匹配,最初選擇組合將填充1個值,或者如果不匹配則請選擇。 ignore允許用戶忽略該字段。 匹配狀態是指字段是否已自動映射

FileHelpers是你的朋友。 我愉快地用它來做幾個項目,這給我帶來了很多悲傷和勞動

暫無
暫無

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

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