4

我正在使用 Sql Server Smo 通过 C# 应用程序创建数据库方案。但是,我需要更多,我还需要从每个表中获取数据作为脚本,如下所示:

--........................................
INSERT INTO Table123 (...) VALUES (....)
INSERT INTO Table456 (...) VALUES (....)
--........................................

我该怎么做,有可能吗?请注意,我需要使用 smo 而不是数据库的 *.bak 等来创建一个脚本。

4

1 回答 1

25

看看 SMO 的Scripter类。以下基本示例适用于我:

using System.Data.SqlClient;
using System.IO;
using System.Text;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;

namespace SqlExporter
{
class Program
{
static void Main(string[] args)
{
    var server = new Server(new ServerConnection {ConnectionString = new SqlConnectionStringBuilder {DataSource = @"LOCALHOST\SQLEXPRESS", IntegratedSecurity = true}.ToString()});
    server.ConnectionContext.Connect();
    var database = server.Databases["MyDatabase"];
    var output = new StringBuilder();

    foreach (Table table in database.Tables)
    {
        var scripter = new Scripter(server) {Options = {ScriptData = true}};
        var script = scripter.EnumScript(new SqlSmoObject[] {table});
        foreach (var line in script)
            output.AppendLine(line);
    }
    File.WriteAllText(@"D:\MyDatabase.sql", output.ToString());
}
}
}

注意:此示例不处理任何外键约束或表之间的其他依赖关系。

参考:

  1. 这个 SO 问题(这让我进入了Scripter课程)
  2. 这个 MSDN 论坛问题(解释了如何使用EnumScript方法)
于 2012-11-05T16:40:26.463 回答