繁体   English   中英

c#使用数据库中的数据生成INSERT脚本

[英]c# generating INSERT script with data from database

我尝试生成一个包含INSERT脚本形式的数据的脚本,我尝试使用一个引用(见下文)来完成此操作

using Microsoft.SqlServer.Management.Smo;

这个代码草案

Server serv = new Server(db);
Database simba = serv.Databases[dbname];
string script = "";

ScriptingOptions so = new ScriptingOptions()
{
    ScriptData = true,
    ScriptSchema = false,
    ScriptDrops = false
};

foreach (Table tb in simba.Tables)
{
    if (tables.Contains(tb.Name))
    {
        var sc = tb.Script(so);
        foreach (var s in sc)
            script += s;

    }
    using (StreamWriter writer = new StreamWriter(file))
    {
        foreach (string tab in tables)
        writer.WriteLine(script);
    }
}

但是这段代码在

var sc = tb.Script(so);

这是

Microsoft.SqlServer.Management.Smo.FailedOperationException

感谢所有答复

我有此代码,并且可以正常使用

var report   = string.Empty;
var fileName = Server.MapPath(Constants.BACKUP_FILE_NAME);

var server      = new Server(new ServerConnection(new SqlConnection(Constants.BACKUP_CONNECTION_STRING)));
var options     = new ScriptingOptions();
var databases   = server.Databases[Constants.BACKUP_DATABASE_NAME];                    

options.FileName                = fileName;
options.EnforceScriptingOptions = true;
options.WithDependencies        = true;
options.IncludeHeaders          = true;
options.ScriptDrops             = false;
options.AppendToFile            = true;
options.ScriptSchema            = true;
options.ScriptData              = true;
options.Indexes                 = true;

report = "<h4>Table Scripts</h4>";
foreach (var table in Constants.BACKUP_TABLES)
{
    databases.Tables[table, Constants.BACKUP_SCHEMA_NAME].EnumScript(options);                        
    report += "Script Generated: " + table + "<br>";
}

“常量”是我的类,用于保存文件名,db等常量值,并且我正在为有限的表生成脚本,因此,不像在代码中那样执行“ simba.Tables”; 如果要生成每个表脚本,则可以肯定地做到这一点。 因此,此代码生成脚本并将其存储到指定文件。

希望能帮助到你

感谢@Zaki Mohammed,

您的代码对我有很大帮助,

我只是针对我的情况进行了一些修改,并且效果很好,

            Server serv = new Server(db);
            Database simba = serv.Databases[dbname];
            Scripter scripter = new Scripter(serv);
            scripter.Options.FileName = "InsertIntoScript.sql";
            scripter.Options.EnforceScriptingOptions = true;
            scripter.Options.WithDependencies = false;
            scripter.Options.IncludeHeaders = true;
            scripter.Options.ScriptDrops = false;
            scripter.Options.AppendToFile = true;
            scripter.Options.ScriptSchema = false;
            scripter.Options.ScriptData = true;
            scripter.Options.Indexes = false;

            string script = "";
            foreach (Table tb in simba.Tables)
            {
                if (tables.Contains(tb.Name))
                {
                    IEnumerable<string> sc = scripter.EnumScript(new Urn[] { tb.Urn });
                    foreach (var s in sc)
                        script += s;
                }
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM