SQL SMO执行批处理TSQL脚本

时间:2010-11-09 17:52:53

标签: c# .net sql-server smo

我正在使用SMO来执行批处理SQL脚本。在Management Studio中,脚本在大约2秒内执行。使用以下代码,大约需要15秒。

var connectionString = GetConnectionString();
// need to use master because the DB in the connection string no longer exists  
// because we dropped it already
var builder = new SqlConnectionStringBuilder(connectionString) 
{ 
    InitialCatalog = "master" 
};

using (var sqlConnection = new SqlConnection(builder.ToString()))
{
    var serverConnection = new ServerConnection(sqlConnection);
    var server = new Server(serverConnection);

    // hangs here for about 12 -15 seconds
    server.ConnectionContext.ExecuteNonQuery(sql);  
}

该脚本创建一个新数据库,并在几个表中插入几千行。生成的DB大小约为5MB。

任何人都有这方面的经验,或者有人建议为什么SMO可能会这么慢?

2 个答案:

答案 0 :(得分:4)

SMO在后台做了许多奇怪的事情,这是你以面向对象的方式处理服务器/数据库对象的能力所付出的代价。
由于您没有使用SMO的OO功能,为什么不完全忽略SMO并简单地通过正常的ADO运行脚本?

答案 1 :(得分:0)

将记录上传到数据库的最佳和最快的方法是通过SqlBulkCopy 特别是当您的脚本大约是1000条记录时 - 这将显着提高速度 您需要做一些工作才能将数据导入DataSet,但这可以使用DataSet xml函数轻松完成。