我正在使用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可能会这么慢?
答案 0 :(得分:4)
SMO在后台做了许多奇怪的事情,这是你以面向对象的方式处理服务器/数据库对象的能力所付出的代价。
由于您没有使用SMO的OO功能,为什么不完全忽略SMO并简单地通过正常的ADO运行脚本?
答案 1 :(得分:0)
将记录上传到数据库的最佳和最快的方法是通过SqlBulkCopy
特别是当您的脚本大约是1000条记录时 - 这将显着提高速度
您需要做一些工作才能将数据导入DataSet,但这可以使用DataSet xml函数轻松完成。