我正在將Excel文件(僅約1000條記錄)導入到專用的SQL Server數據庫。因爲我需要處理來自Excel的傳入數據(每行添加一個GUID,進行一些數據轉換),我希望逐行執行並且不想批量導入(儘管我對交易沒有任何反應)。將Excel文件逐行導入到SQL Server
我很困惑如何正確地做到這一點。我可以用一個SQLCommand
與參數,像這樣:
SqlCommand sqlCommand = new SqlCommand("insert into TestTable(GUID,Name,Pricing) values(@GUID,@Name,@Pricing)", sqlConn);
foreach (DataRow dr in ds.Tables[0].Rows) //<-- this is my Excel file to iterate through
{
sqlCommander.Parameters.Clear();
String refGUID = Guid.NewGuid().ToString();
sqlCommander.Parameters.AddWithValue("GUID", refGUID);
sqlCommander.Parameters.AddWithValue("Name", dr.ItemArray[0]);
sqlCommander.Parameters.AddWithValue("Pricing", dr.ItemArray[1]);
sqlCommander.ExecuteNonQuery();
}
或者,我可以使用「連接」模式,像這樣:
SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT GUID, Name, Pricing FROM TestTable", sqlConn);
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
DataSet myDataSet = new DataSet();
dataAdapter.Fill(myDataSet, "TestTable");
foreach (DataRow dr in ds.Tables[0].Rows) //<-- this is my Excel file to iterate through
{
DataRow row = myDataSet.Tables[0].NewRow();
row["GUID"] = refGUID;
row["Name"] = dr.ItemArray[0];
row["Pricing"] = dr.ItemArray[1];
myDataSet.Tables[0].Rows.Add(row);
dataAdapter.Update(myDataSet);
}
現在我的問題有以下幾點:
- 爲每一行發送
INSERT
命令(這將是SqlCommand
方法)還是更好地填充特殊DataSet
(第二種方法)?我猜這對於有1000個插入SQL服務器是相當「愚蠢的」? dataAdapter.Update(myDataSet)
< - 我應該在迭代所有Excel行或每行(如上面的示例代碼所示)後執行該操作,這是否會奇蹟般地創建事務?- 我應該使用哪種方法?還有LINQ to SQL - 爲什麼不使用它(性能可能是因爲另一層)?
DataSet
當讀取Excel文件時發生某些錯誤時會發生什麼 - 更新仍然推送到SQL服務器還是一切丟失?
簡而言之:我想導入Excel文件到SQL Server行由行而製作上的數據變化要導入(我不希望使用SSIS包[因爲除了數據轉換之外,我對Excel文件做了很多工作,例如將其導入Sharepoint並解僱工作流]或BizTalk)
» »如何做到這一點?
最後我繼續購買 Aspose Cells。 Aspose擁有一套非常優秀的工具。
爲什麼你不想使用SSIS?如果該工具適合... – 2010-10-27 14:43:46
因爲我同時將Excel文件導入Sharepoint,並創建Infopath表單和任務並啓動工作流程,所以不是簡單地導入。與使用一些SSIS包(除了基本示例之外,我從來沒有創建過這個包)相比,我更願意「掌握代碼」。 – 2010-10-27 14:54:54
你的問題忽略提及新的信息....但它幾乎肯定可能在SSIS ... – 2010-10-27 15:02:43