12. februar 2010 - 13:02Der er
4 kommentarer og 1 løsning
Hent data med ud i SQL-script
Jeg benytter følgende SMO kode til at hente en database ud som et SQL-script. Det virker ganske smukt; men jeg får dog ikke hentet dataene med ud - kun schema-definitionen. Jeg har følgende kode:
Server server = new Server(@"MINMASKINE\SQLEXPRESS");
//Using windows authentication server.ConnectionContext.LoginSecure = true; server.ConnectionContext.Connect();
Database db = server.Databases["Test"];
// Set For Capture Mode Only server.ConnectionContext.SqlExecutionModes = SqlExecutionModes.CaptureSql;
// Setup transfer Transfer t = new Transfer(db);
t.CopyAllObjects = true; t.CopyData = true;
// Capture Transfer StringCollection commands = t.ScriptTransfer();
// Get Script Into A String StringBuilder sb = new StringBuilder(); foreach (string s in commands) { sb.Append(s); } string script = sb.ToString();
server.ConnectionContext.Disconnect(); server = null;
Det er ikke en mulighed i denne sammenhæng. Min databaseserver indeholder et variabelt antal databaser med et variabelt antal tabeller i hver.
Den funktionalitet jeg ønsker er den, der er at finde i Database Publishing Wizard, hvor der kan genereres en sql-fil for hver database, der indeholder schema samt data.
Lige pt. kan jeg godt få schemas ud med ovennævnte; men der bliver ikke genereret INSERT statements til data i min .sql-fil.
using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Smo;
namespace E { public class Program { public static void Main(string[] args) { Server srv = new Server(@"ARNEPC3\SQLEXPRESS"); srv.ConnectionContext.LoginSecure = true; srv.ConnectionContext.Connect(); Transfer t = new Transfer(srv.Databases["Test"]); t.CopyAllObjects = true; t.CopyData = true; // does not work StringBuilder sb = new StringBuilder(); foreach (string s in t.ScriptTransfer()) { sb.Append(s); sb.Append(Environment.NewLine); } string res = sb.ToString(); srv.ConnectionContext.Disconnect(); Console.WriteLine(res); Console.ReadKey(); } } }
genererer ikke INSERT, men
using System; using System.Linq; using System.Text;
using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Smo;
namespace E { public class Program { public static void Main(string[] args) { Server srv = new Server(@"ARNEPC3\SQLEXPRESS"); srv.ConnectionContext.LoginSecure = true; srv.ConnectionContext.Connect(); Scripter scr = new Scripter(srv); scr.Options.ScriptSchema = true; scr.Options.ScriptData = true; // works StringBuilder sb = new StringBuilder(); foreach (string s in scr.EnumScript(srv.Databases["Test"].Tables.Cast<SqlSmoObject>().ToArray())) { sb.Append(s); sb.Append(Environment.NewLine); } string res = sb.ToString(); srv.ConnectionContext.Disconnect(); Console.WriteLine(res); Console.ReadKey(); } } }
gør det !?!?
Men du prøver med en 'Scripter' fremfor en 'Transfer'.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.