2012-11-05 15 views
5

Ich benutze Sql Server Smo, um das Schema der Datenbank von C# -Anwendung zu erstellen. Ich brauche aber ein bisschen mehr, ich brauche auch aus jeder Tabelle Daten erhalten als Skript wie unten:Erhalten Sql Server Daten mit smo

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

Wie kann ich das tun und ist es möglich? Beachten Sie bitte, dass ich genau ein Skript erstellen muss, das smo und nicht * .bak einer Datenbank usw. verwendet.

+0

Warum zuerst unter Verwendung von Entity Framework Code nicht Ansatzstelle von 'smo'? Es erstellt auch ein Datenbankschema. Sie können auch SQL-Skripte zum manuellen Einfügen/Aktualisieren/Löschen generieren. Überprüfen Sie [diesen Link] (http://www.codeproject.com/Articles/14528/Generate-SQL-INSERT-commands-programmatically) – Jalal

+1

SQL Server, so weit ich weiß, hat keine Möglichkeit, seine Daten in auszugeben die Form eines INSERT-Skripts. Sie können BCP verwenden, um z.B. CSV-Dateien und eine Formatdatei, aber es würde nicht dem Format dessen entsprechen, was Sie verlangen. –

+0

Wenn Sie das Schema aufbauen, warum können Sie das Skript nicht einfach als Text aufbauen? – Paparazzi

Antwort

24

Werfen Sie einen Blick auf die Scripter Klasse von SMO. Das folgende einfache Beispiel funktioniert für mich:

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()); 
} 
} 
} 

Hinweis: Dieses Beispiel keine Fremdschlüssel-Constraints oder andere Abhängigkeiten zwischen den Tabellen umgehen kann.

Referenzen:

  1. This SO question (das hat mich auf die Scripter Klasse)
  2. This MSDN forum question (das erklärt, wie die EnumScript Methode verwenden)
+0

Gibt es eine Möglichkeit, nur einen Teil der Daten einer Tabelle zu skripten? (Ausdrücken eines Where-Zustandes) – thestral

+0

Ich versuche das auch, d. H. Ausdrücken einer Where-Bedingung, weiß jemand, ob dies mit SMO möglich ist? – Alicia

Verwandte Themen