Ado.net怎么实现批量插入数据?

Ado.net怎么实现批量插入数据?,第1张

在做大批量数据插入的时候,如果用Insert into ... values (...)这种方式的话效率极低,这里介绍两种性能比较好的批量插入方法。 1. 使用SqlBulkCopyprivate static long SqlBulkCopyInsert(){Stopwatch stopwatch = new Stopwatch()stopwatch.Start()DataTable dataTable = GetTableSchema()string passportKeyfor (int i = 0i <counti++){passportKey = Guid.NewGuid().ToString()DataRow dataRow = dataTable.NewRow()dataRow[0] = passportKeydataTable.Rows.Add(dataRow)}SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connectionString)sqlBulkCopy.DestinationTableName = "Passport"sqlBulkCopy.BatchSize = dataTable.Rows.CountSqlConnection sqlConnection = new SqlConnection(connectionString)sqlConnection.Open()if (dataTable!=null &&dataTable.Rows.Count!=0){sqlBulkCopy.WriteToServer(dataTable)}sqlBulkCopy.Close()sqlConnection.Close()stopwatch.Stop()return stopwatch.ElapsedMilliseconds}使用SqlBulkCopy类进行数据插入其原理是采用了SQL Server的BCP协议进行数据的批量复制。这里我们先要建好一个DataTable(最好是通过DataAdapter来灌数据得到,因为这样出来的DataTable就已经有跟数据表相同的列定义,可以免去之后Mapping Column的步骤),把要插入的数据加进这个DataTable中,然后用SqlBulkCopy的实例来插入到数据库中。经过测试,SqlBulkCopy方法比直接用Sql语句插入数据的效率高出将近25倍。

你最好是将插入的数据写入到dataset,或者datatable中,然后再写入excel

在sheet1中包含一个列表,有表头c1,c2,c3,即a1单元格的值是c1,a2单元格的值是c2,a1单元格的值是c3。现需要往这个列表中插入一条数据:

string excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0Data Source=" + fileName+ "Extended Properties=\"Excel 8.0\""

OleDbConnection conn = new OleDbConnection(excelConnectionString)

conn.Open()

OleDbCommand cmd = new OleDbCommand()

cmd.Connection = conn

string sql = "insert into [sheet1$] values('1','2','3')"

cmd.CommandText = sql

cmd.ExecuteNonQuery()

这是一种方法,当然也可以通过调用EXCEL的COM对象来完成。

如果你要插入的不是列表的话,如果你的excel中不是列表的话,需要在你sheet中特定的单元格中“插入名称”。

提供一个方法仅供参考哦

public static bool SaveDataTableToExcel(System.Data.DataTable excelTable, string filePath)

{

Microsoft.Office.Interop.Excel.Application app =

new Microsoft.Office.Interop.Excel.ApplicationClass()

try

{

app.Visible = false

Workbook wBook = app.Workbooks.Add(true)

Worksheet wSheet = wBook.Worksheets[1] as Worksheet

if (excelTable.Rows.Count >0)

{

int row = 0

row = excelTable.Rows.Count

int col = excelTable.Columns.Count

for (int i = 0i <rowi++)

{

for (int j = 0j <colj++)

{

string str = excelTable.Rows[i][j].ToString()

wSheet.Cells[i + 2, j + 1] = str

}

}

}

int size = excelTable.Columns.Count

for (int i = 0i <sizei++)

{

wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName

}

//设置禁止d出保存和覆盖的询问提示框

app.DisplayAlerts = false

app.AlertBeforeOverwriting = false

//保存工作簿

wBook.Save()

//保存excel文件

app.Save(filePath)

app.SaveWorkspace(filePath)

app.Quit()

app = null

return true

}

catch (Exception err)

{

MessageBox.Show("导出Excel出错!错误原因:" + err.Message, "提示信息",

MessageBoxButtons.OK, MessageBoxIcon.Information)

return false

}

finally

{

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11416255.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存