.net2.0后ado.net提供了一个快速导入sqlserver的方法sqlbulkcopy.导入效率非常高.
包装了一个简单的sqlbulkcopy类,用于数据从datatable导入到sqlserver.代码如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
namespace taihe.framework.tools.import
{
public class SqlBulkCopy
{
private int timeout = 1800;
private System.Data.SqlClient.SqlBulkCopy sqlBulkCopy = null;
public SqlBulkCopy()
{
}
public SqlBulkCopy(int timeout)
{
this.timeout = timeout;
}
public void WriteToDataBase(DataTable source, string tableName,bool useTransaction,string dataBaseConnString,bool clearTable)
{
//判断表是否存在
taihe.framework.data.datalayer.SqlDataHelper dataHelper = new data.datalayer.SqlDataHelper(dataBaseConnString);
dataHelper.IsConnString = true; //使用数据库连接字符串创建sqlserver操作对象
string sql = "select * from sys.objects where type='U' and name='" + tableName + "'";
DataTable dt = dataHelper.ExecuteDataSet(sql).Tables[0];
if (dt.Rows.Count > 0)
{
if (clearTable == true)
{
sql = "drop table " + tableName + ""; //清除已存在的表
}
else
{
throw new Exception("要创建的表已存在");
}
}
this.CreateTable(dataHelper, source.Columns, tableName);
sqlBulkCopy = new System.Data.SqlClient.SqlBulkCopy(dataBaseConnString);
if (useTransaction == true)
{
sqlBulkCopy = new System.Data.SqlClient.SqlBulkCopy(dataBaseConnString, SqlBulkCopyOptions.UseInternalTransaction); //导入的数据在一个事务中
}
sqlBulkCopy.DestinationTableName = tableName;
foreach (DataColumn c in source.Columns)
{
sqlBulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName);
}
sqlBulkCopy.BulkCopyTimeout = this.timeout; //超时时间
sqlBulkCopy.BatchSize = 3000; //每次传输3000行
sqlBulkCopy.WriteToServer(source);
}
public void CreateTable(taihe.framework.data.datalayer.SqlDataHelper dataHelper, System.Data.DataColumnCollection columns,string tableName)
{
StringBuilder sb = new StringBuilder();
sb.Append("create table [" + tableName + "] (autoId int identity(1,1),");
foreach (DataColumn column in columns)
{
sb.Append(" [" + column.ColumnName + "] " + this.GetTableColumnType(column.DataType) + ",");
}
string sql = sb.ToString();
sql = sql.TrimEnd(',');
sql += ")";
dataHelper.ExecuteNonQuery(sql);
}
private string GetTableColumnType(System.Type type)
{
string result = "varchar(255)";
string sDbType = type.ToString();
switch (sDbType)
{
case "System.String":
break;
case "System.Int16":
result = "int";
break;
case "System.Int32":
result = "int";
break;
case "System.Int64":
result = "float";
break;
case "System.Decimal":
result="decimal(18,4)";
break;
case "System.Double":
result = "decimal(18,4)";
break;
case "System.DateTime":
result = "datetime";
break;
default:
break;
}
return result;
}
}
}
分享到:
相关推荐
Z.SqlBulkCopy.Extension第三...使用时直接按照.net中sqlbulkcopy的使用方法调用执行就可以,很方便,没有什么特别的。所以,这是z项目人员,把整个库称为Extension扩展库的原因。 少赚点积分。相互支持。zip压缩文件。
C# 利用SqlBulkCopy 高性能批量插入海量数据 高效批量插入数据
于是乎,下demo,测试,改成自己一般使用的方法测试,NND,还真可以说是极速。 在此贴上我的Demo:SqlBulkCopy.rar 代码如下: using System; using System.Diagnostics; using System.Data; using System.Data....
主要介绍了C#使用SqlBulkCopy批量复制数据到数据表的方法,较为详细的讲述了SqlBulkCopy批量复制数据到数据表的原理与实现技巧,需要的朋友可以参考下
需要批量导入数据到Sqlserver的同学们,这是福音,不用担心导入数据和已有数据的冲突问题(这是.NET中sqlbulkcopy的不足),直接合并更新就可以了。 Z项目还有很多好东西,有兴趣自己可以去看看。 本部分是dll程序集...
C# 使用SqlBulkCopy类批量复制大数据
利用SqlBulkCopy实现网上答题系统作者:张德强调试环境:Win XP;.Net
下面的控制台应用程序演示如何使用 SqlBulkCopy 类加载数据。在此示例中,使用 SqlDataReader 将数据从 SQL Server 2005 AdventureWorks 数据库中的 Production.Product 表复制到同一数据库中的相似表。 重要说明...
使用C#自带SqlBulkcopy类,批量插入数据库,与一般insert into 插入效率相比,插入速度一个天一个地,效果很明显。特别用在导入大量数据时。
Excel导入数据,使用SqlBulkCopy类批量导入数据到数据库。
Sqlserver批量导入数据的示例(SqlBulkCopy),有示例解决方案和说明。
C#z中连接数据库的,如有需要可以借,这个开发是项目中必备的的
SqlBulkCopy SQL2005 批量插入数据 性能优化
SqlBulkCopy提供了一种将数据复制到Sql Server数据库表中高性能的方法。SqlBulkCopy 包含一个方法 ... 你可以根据不同的情形使用不同的数据类型。SqlBulkCopy其原理是采用了SQL Server的BCP协议进行数据的批量复制。
Excel导入数据,使用SqlBulkCopy类批量导入数据到数据库。
ADO.Net-XML-Demo:使用sqlbulkcopy将XML数据加载到SQL Server表中(第18部分)
后经仔细调试发现,由于使用SqlBulkCopy导入时我的文本文件与库中的表列不对应造成的。我的文本文件中有字段18个,而我的表中只使用了9个字段,且有两个是文本文件中没有的(即表结构1中的[Level]与[Cagegory]字段...
使用C#自带SqlBulkcopy类,批量插入数据库,与一般insert into 插入效率相比,插入速度一个天一个地,效果很明显。特别用在导入大量数据时。