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>");
    }

}
posted @ 2007-05-01 16:48  苹果王子  阅读(1251)  评论(6编辑  收藏  举报