数据库
首页 > 数据库> > c#-将Excel文件逐行导入SQL Server

c#-将Excel文件逐行导入SQL Server

作者:互联网

我正在将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 Server进行1000次插入是“愚蠢的”吗?
> dataAdapter.Update(myDataSet)<-在遍历所有Excel行或每一行之后是否应该执行此操作(如上面的示例代码所示),这会神奇地创建事务吗?
>应该使用哪种方法?还有LINQ to SQL-为什么不使用它(性能可能由于另一层而定)?
>当读取Excel文件时发生某些错误时,数据集会发生什么-更新是否仍推送到SQL Server或所有内容丢失了?

简而言之:我想逐行将Excel文件导入到SQL Server,同时对要导入的数据进行更改(而且我不想使用SSIS包[因为除了数据转换外,我还要做很多事情与Excel文件一样,例如将其导入到Sharepoint并触发工作流]或BizTalk)
»»如何做得漂亮?

最终,我继续前进,购买了Aspose Cells.Aspose有一套非常好的工具可供使用.

解决方法:

您提到不想使用SSIS-但您是否考虑了SqlBulkCopy?然后,除了.NET不需要任何东西,但您仍然可以使用最快/最直接的导入.

这将接受一个DataTable,因此您可以在DataTable中准备数据,然后拉动触发器.可以选择支持IIRC事务.对于较大的数据,您还可以实现IDataReader以提供完全流式上载(同时仍在处理传输中的每一行).

标签:import-from-excel,dataadapter,dataset,c,sql-server
来源: https://codeday.me/bug/20191023/1915363.html