【发布时间】:2011-05-01 08:56:45
【问题描述】:
我正在将一个 Excel 文件(仅大约 1000 条记录)导入专用的 SQL Server 数据库。由于我需要处理来自 Excel 的传入数据(每行添加一个 GUID,一些数据转换),我想逐行进行并且不想批量导入(不过,我对交易没有任何意见)。
我对如何正确执行此操作感到困惑。我可以使用带有如下参数的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(第二种方法)更好?我想在 SQL 服务器中插入 1000 次是相当“愚蠢”的? -
dataAdapter.Update(myDataSet) - 我应该使用哪种方法? 还有 LINQ to SQL - 为什么不使用它(性能可能,因为另一层)?
- 当读取 Excel 文件时出现一些错误时,
DataSet会发生什么 - 更新仍然推送到 SQL 服务器还是所有内容都丢失了?
简而言之:我想将 Excel 文件逐行导入 SQL 服务器,同时对要导入的数据进行更改(而且我不想使用 SSIS 包 [因为除了数据转换 我正在使用 Excel 文件做更多的事情,例如将其导入 Sharepoint 并触发 Workflows] 或 BizTalk)
»» 如何完美地做到这一点?
最后我继续买了Aspose Cells。 Aspose 有一套非常好的工具供他们使用。
【问题讨论】:
-
为什么不想使用 SSIS?如果工具适合...
-
因为我同时将 Excel 文件导入 Sharepoint,并创建 Infopath 表单和任务并启动工作流,所以它不仅仅是导入。与使用一些 SSIS 包(除了基本示例之外我从未创建过)相比,我也更乐于“处理代码”。
-
您的问题忽略了提及新信息......但在 SSIS 中几乎可以肯定......
-
我编辑了问题以包含该信息。我正在从 Sharepoint 触发代码,因此我认为将 SSIS 包部署到 SQL 服务器并从 Sharepoint 调用该包并不是那么聪明。是的,即使没有包含这些信息,但我主要想了解数据连接之间的差异,以找出最佳方法。
标签: c# sql-server dataset dataadapter import-from-excel