c# - 使用smo获取Sql server的数据

标签 c# .net sql-server smo

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

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

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

最佳答案

查看 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. This SO question(这让我进入了 Scripter 类(class))
  2. This MSDN forum question(解释了如何使用 EnumScript 方法)

关于c# - 使用smo获取Sql server的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13233982/

相关文章:

c# - 为什么 EF 在 FirstOrDefault 调用 (EF6) 后没有从数据库返回包含新数据的实体?

c# - Cosmos DB 中的重试策略

SQL 服务器 : Update table based on JSON

sql - 如果查询完成时出现错误,是否需要回滚?

javascript - 使用 OPENROWSET 通过 SQL Server 访问 Oracle DB

c# - 如何在Windows Phone 7 中释放应用程序缓存?

c# - 第一次尝试时如何选择打开 Unity 游戏的显示器

.net - 在 CQRS 模式 + 事件源中读取 "latest data"的使用模式

c# - 使用 Reactive 并行运行方法

.net - 在 Fluent Nhibernate 中配置 "no-proxy"