MM测试数据库承受能力- -(恶搞 SqlBulkCopy )
//---------注意如果有一样的数据还是可以添加的--最多批量插入 4031040条数据测试过
环境
sql2005+net2005-系统vista-内存2Gb,cpu2.6--最后说下就清空所有数据但是经过覆盖数据的blog文件还是超级大大概1.5gb左右
//---------注意如果有一样的数据还是可以添加的--最多批量插入 4031040条数据测试过
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Default4 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string BlogString;
string DbTextStirng;
//检索源
SqlConnection BlogConnection = new SqlConnection();
//插入源
SqlConnection DbTextConnection = new SqlConnection();
SqlCommand BlogCommand = new SqlCommand();
SqlDataReader BlogReader;
BlogString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
DbTextStirng = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringInfo"].ConnectionString;
BlogConnection.ConnectionString = BlogString;
BlogCommand.Connection = BlogConnection;
//----设置要插入到其他表的数据愿
BlogCommand.CommandText = "SELECT* FROM MM";
BlogCommand.CommandType = CommandType.Text;
BlogCommand.Connection.Open();
//--使您可以用其他源的数据有效批量加载SQL Server 表。
//connectionString 定义将打开的且由SqlBulkCopy 实例使用的连接的字符串。copyOptions SqlBulkCopyOptions 枚举中的值的组合,该枚举确定将哪些数据源行复制到目标表中。
//--------------------------------------------将数据复到那里的连接字符串
SqlBulkCopy BlogSqlBulkCopy = new SqlBulkCopy(DbTextStirng, SqlBulkCopyOptions.UseInternalTransaction);
// SqlBulkCopyOptions枚举 成员名称说明
//CheckConstraints 请在插入数据的同时检查约束。默认情况下,不检查约束。
//Default 对所有选项使用默认值。
//FireTriggers 指定后,会导致服务器为插入到数据库中的行激发插入触发器。
//KeepIdentity 保留源标识值。如果未指定,则由目标分配标识值。
//KeepNulls 保留目标表中的空值,而不管默认值的设置如何。如果未指定,则空值将由默认值替换(如果适用)。
//TableLock 在批量复制操作期间获取批量更新锁。如果未指定,则使用行锁。
//UseInternalTransaction 如果已指定,则每一批批量复制操作将在事务中发生。如果指示了此选项,并且为构造函数提供了SqlTransaction 对象,则发生ArgumentException。
//设置要Copy的目标表
BlogSqlBulkCopy.DestinationTableName = "GG";
//--创建一个源列于目表列的引用----------如果源列于目表列一样则可以跳过映射
BlogSqlBulkCopy.ColumnMappings.Add("ID", "ID");
BlogSqlBulkCopy.ColumnMappings.Add("MmName", "MmName");
//--另外一种添加饮用的方式
SqlBulkCopyColumnMapping UrlAddress =new SqlBulkCopyColumnMapping("UrLAddress", "UrLAddress");
BlogSqlBulkCopy.ColumnMappings.Add(UrlAddress);
//-超时之前操作完成所允许的秒数。
BlogSqlBulkCopy.BulkCopyTimeout = 50000000;
//在每次处理完NotifyAfter 属性指定的行数时发生。
BlogSqlBulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(this.OnRowsCopied);
//定义在生成通知事件之前要处理的行数。
BlogSqlBulkCopy.NotifyAfter = 1;
BlogReader = BlogCommand.ExecuteReader();
try
{
//----------将所有行从数据源复制到SqlBulkCopy 对象的DestinationTableName 属性指定的目标表中。
BlogSqlBulkCopy.WriteToServer(BlogReader);
}
catch (SyntaxErrorException ex)
{
Response.Write(ex.Message);
}
finally
{
BlogReader.Close();
}
}
private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args)
{
Response.write(args.RowsCopied.ToString() + "<br>");
}
}
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Default4 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string BlogString;
string DbTextStirng;
//检索源
SqlConnection BlogConnection = new SqlConnection();
//插入源
SqlConnection DbTextConnection = new SqlConnection();
SqlCommand BlogCommand = new SqlCommand();
SqlDataReader BlogReader;
BlogString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
DbTextStirng = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionStringInfo"].ConnectionString;
BlogConnection.ConnectionString = BlogString;
BlogCommand.Connection = BlogConnection;
//----设置要插入到其他表的数据愿
BlogCommand.CommandText = "SELECT* FROM MM";
BlogCommand.CommandType = CommandType.Text;
BlogCommand.Connection.Open();
//--使您可以用其他源的数据有效批量加载SQL Server 表。
//connectionString 定义将打开的且由SqlBulkCopy 实例使用的连接的字符串。copyOptions SqlBulkCopyOptions 枚举中的值的组合,该枚举确定将哪些数据源行复制到目标表中。
//--------------------------------------------将数据复到那里的连接字符串
SqlBulkCopy BlogSqlBulkCopy = new SqlBulkCopy(DbTextStirng, SqlBulkCopyOptions.UseInternalTransaction);
// SqlBulkCopyOptions枚举 成员名称说明
//CheckConstraints 请在插入数据的同时检查约束。默认情况下,不检查约束。
//Default 对所有选项使用默认值。
//FireTriggers 指定后,会导致服务器为插入到数据库中的行激发插入触发器。
//KeepIdentity 保留源标识值。如果未指定,则由目标分配标识值。
//KeepNulls 保留目标表中的空值,而不管默认值的设置如何。如果未指定,则空值将由默认值替换(如果适用)。
//TableLock 在批量复制操作期间获取批量更新锁。如果未指定,则使用行锁。
//UseInternalTransaction 如果已指定,则每一批批量复制操作将在事务中发生。如果指示了此选项,并且为构造函数提供了SqlTransaction 对象,则发生ArgumentException。
//设置要Copy的目标表
BlogSqlBulkCopy.DestinationTableName = "GG";
//--创建一个源列于目表列的引用----------如果源列于目表列一样则可以跳过映射
BlogSqlBulkCopy.ColumnMappings.Add("ID", "ID");
BlogSqlBulkCopy.ColumnMappings.Add("MmName", "MmName");
//--另外一种添加饮用的方式
SqlBulkCopyColumnMapping UrlAddress =new SqlBulkCopyColumnMapping("UrLAddress", "UrLAddress");
BlogSqlBulkCopy.ColumnMappings.Add(UrlAddress);
//-超时之前操作完成所允许的秒数。
BlogSqlBulkCopy.BulkCopyTimeout = 50000000;
//在每次处理完NotifyAfter 属性指定的行数时发生。
BlogSqlBulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(this.OnRowsCopied);
//定义在生成通知事件之前要处理的行数。
BlogSqlBulkCopy.NotifyAfter = 1;
BlogReader = BlogCommand.ExecuteReader();
try
{
//----------将所有行从数据源复制到SqlBulkCopy 对象的DestinationTableName 属性指定的目标表中。
BlogSqlBulkCopy.WriteToServer(BlogReader);
}
catch (SyntaxErrorException ex)
{
Response.Write(ex.Message);
}
finally
{
BlogReader.Close();
}
}
private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args)
{
Response.write(args.RowsCopied.ToString() + "<br>");
}
}