C#和MS SQL交互使用的技术叫做 ADO.NET。 使用ADO.NET可以方便的对SQL SERVER 进行 *** 作。
(如果你对ADO.NET不了解,建议先MSDN一下)
批量插入数据,有两种方式,
1,数据比较复杂但是量不是很大,(这个大小的概念要视你的硬件、网络而定,一般在100万条以上才叫大)。
使用FOR循环进行插入, 即声明连接(conn.Open)然后进行遍历,
一条一条插入数据库(执行Insert语句),
一般来说,100W条数据,如果插入本机数据库的话, 耗时一般在40S-1分钟左右,
也可以在SqlServer中创建一个存储过程来执行Insert命令, 遍历时只需要调用存储过程即可, 存储过程的执行效率比Sql语句要高很多,因为不需要每次都编译。
100W条数据用存储过程来执行的话,一般耗时在20S左右,。
2数据量巨大,但是类型较简单,(一般指上百万条数据)
使用ADO.NET提供的BulkCopy,即批量导入,
语法:
public static void BulkToDB(DataTable dt, string TableName){
SqlConnection sqlConn = new SqlConnection(
ConfigurationManager.ConnectionStrings["dbconnstr"].ConnectionString)
SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn)
bulkCopy.BulkCopyTimeout = 600
bulkCopy.DestinationTableName = TableName
bulkCopy.BatchSize = dt.Rows.Count
try
{
sqlConn.Open()
if (dt != null && dt.Rows.Count != 0)
bulkCopy.WriteToServer(dt)
}
catch (Exception ex)
{
throw ex
}
finally
{
sqlConn.Close()
if (bulkCopy != null)
bulkCopy.Close()
}
}
需要传入一个DataTable,一个表名。
这种方式速度非常快,同样100W条数据,本机导入,大概3-5秒就可以完成,
但是需要注意,传入的DataTable必须和Sql Server中的表结构一模一样,
比如你的表有3列,分别是Name, Age, Sex。 你传入的DataTable也必须是如此,所以这种方式只适合导入一些基础数据, 并不适合作为数据层的常用方法。
如果数据量巨大又要求很高的效率,更建议使用NoSql数据库
ls 写的方法也可以,但好像限定SQLserver也可以使用DataAdapter
设置 dataadapter 的 selectCommand 和 updateCommand
dataadapter.fill(dataset,tablename)
for ...
new datarow
edit datarow
dataset.Tables("tablename").Rows.Add(datarow)
next
dataadapter.update(dataset)
凭记忆写的,
可能有些地方不准确
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)