我尝试生成一个脚本,其中包含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
感谢所有回复
答案 0 :(得分:1)
我有这个代码并且工作正常,尝试使用它
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>";
}
&#34;常数&#34;是我的类来保存文件名,数据库等常量值,我正在为有限的表生成脚本,因此没有做&#34; simba.Tables&#34;就像你在代码中所做的那样;如果你想生成每个表脚本,你肯定可以这样做。因此,此代码生成脚本并将其存储到指定的文件。
希望有所帮助
答案 1 :(得分:1)
谢谢@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;
}
}