背景:我有一個asp.net網頁(剃鬚刀)應用程序在一個2008R2 web服務器上,有一個頁面與excel上傳按鈕,允許用戶將Excel數據發佈到SQL Server 2014表。爲了使它在開發服務器上工作,我必須按照MikesDotNetting blog post.中所述安裝Microsoft Access數據庫引擎2010。但是,我一直在鼓勵我找到一種方法將數據導入到不需要安裝Microsoft的生產服務器在服務器上訪問數據庫引擎。我有一個C#Windows Forms應用程序可以做同樣的事情,但我不擅長將Windows Forms應用程序代碼轉換爲我的剃鬚刀網站。Asp.net網頁(剃鬚刀)頁面導入Excel數據到SQL Server 2014表
我沒想到居然下面這段代碼的工作,因爲我張貼數據到SQL Server 2014和according to MS OleDB has been deprecated和自SQL Server 2012的
Q1沒有得到支持 - 是否過時僅僅意味着「用戶自擔風險「還是意味着它不應該在2014年工作?
下面的代碼(在我的if ... ISPOST之後出現)很適合將excel文件上傳到我的Web服務器,然後插入到SQL Server 2014表中。我只需要找到一種方法來使其工作,而無需將Microsoft Access數據庫引擎安裝到生產服務器2008 R2 IIS7。
Q2 - 是否有一些Nuget包或其他解決方法可能有幫助?
Q3 - 有速戰速決來轉換OLE DB連接字符串ODBC?
Q4 - 有一個命名空間/組件,我可以添加到將不需要訪問數據庫引擎在服務器上安裝的項目呢?
代碼:
try
{
// import code
var excel = Request.Files[0];
var file = Path.Combine(Server.MapPath("~/Upload_Folder/"), excel.FileName);
excel.SaveAs(file);
var excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=Yes;IMEX=1\"";
var sqlConnectionString = ConfigurationManager.ConnectionStrings["MYCONNECTIONSTRING"].ToString();
var excelData = new DataTable();
using (var myConnection = new OleDbConnection(string.Format(excelConnectionString, file)))
{
var myCommand = new OleDbCommand("SELECT * FROM [Sheet1$]", myConnection);
var myAdapter = new OleDbDataAdapter(myCommand);
myAdapter.Fill(excelData);
using (var destinationConnection = new SqlConnection(sqlConnectionString))
{
destinationConnection.Open();
using (var bulkCopy = new SqlBulkCopy(destinationConnection))
{
bulkCopy.DestinationTableName = "MYTABLE";
bulkCopy.ColumnMappings.Add("CODE", "code");
bulkCopy.ColumnMappings.Add("TITLE", "title");
bulkCopy.ColumnMappings.Add("LAST_NAME", "last_name");
bulkCopy.ColumnMappings.Add("FIRST_NAME", "first_name");
}
}
if (Directory.Exists(Path.GetDirectoryName(file)))
{
File.Delete(file);
}
}
}
catch (Exception ex)
{
throw ex;
}
Q1(已回覆)。我發現另一個[S.O.張貼一個很好的解釋](http://stackoverflow.com/questions/9208091/the-difference-between-deprecated-depreciated-and-obsolete)和[2011年底的博客文章](http://hal2020.com/2011/09/25/ole-db-and-sql-server-history-end-game-and-some-microsoft-dirt /),它有一些敘述暗示,但不贊成,OLE DB將會支持另外7年即到2018年)。 – TimK
Q2(已回覆)。有幾個Nuget軟件包選項可用於處理Excel文件[ClosedXML](http://blog.bajajsumit.com/2014/02/uploading-excel-and-importing-data-in.html),[ExcelDataReader](https ://www.nuget.org/packages/ExcelDataReader/),[EPPlus](https://www.nuget.org/packages/EPPlus/)等。 但是,我決定從我創建一個dll c#windows窗體應用程序(注意:我最初稱它爲OP中的控制檯應用程序)。這是非常簡單的,如[本SO帖子]所述(http://stackoverflow.com/questions/11536140/convert-a-completed-project-to-a-dll) – TimK
Q3(已回答)。我還沒有這樣做,但我發現這個不錯的博客文章演示瞭如何將您的OLE DB連接轉換爲[ODBC連接](https://www.simple-talk.com/sql/database-administration/getting-data- Excel的和使用-SQL服務器之間-Books - /)。 – TimK