2012-11-05 10 views
5

Sto usando Sql Server Smo per creare lo schema del database con l'applicazione C#. Tuttavia, ho bisogno di un po 'di più, ho anche bisogno di ottenere i dati da ogni tabella come un sceneggiatura come di seguito:Ottieni i dati del server Sql usando smo

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

Come posso fare che e' possibile? Notare per favore che ho bisogno di creare esattamente uno script usando smo e non * .bak di un database, ecc.

+0

Perché non utilizzare il codice Entity Framework primo l'approccio di 'smo'? Crea anche lo schema del database. puoi anche generare script sql per inserire/aggiornare/eliminare manualmente. controllare [questo collegamento] (http://www.codeproject.com/Articles/14528/Generate-SQL-INSERT-commands-programmatically) – Jalal

+1

SQL Server, per quanto ne so, non ha la possibilità di scaricare i dati in la forma di uno script 'INSERT'. Puoi utilizzare BCP per produrre ad es. file CSV e un file di formato, ma non si adatta al formato di ciò che stai chiedendo. –

+0

Se si sta creando lo schema, perché non si può semplicemente creare quello script come testo. – Paparazzi

risposta

24

Dai un'occhiata alla classe Scripter di SMO. Il campione di base seguente funziona per me:

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

Nota: Questo esempio non gestisce alcun vincolo di chiave esterna o altre dipendenze tra i tavoli.

Riferimenti:

  1. This SO question (che mi ha imboccarono la classe Scripter)
  2. This MSDN forum question (che ha spiegato come utilizzare il metodo EnumScript)
+0

È possibile scrivere solo una parte dei dati di una tabella? (Esprimendo una condizione where) – thestral

+0

Sto anche provando a farlo, cioè esprimendo una condizione where, qualcuno sa se questo è possibile con SMO? – Alicia

Problemi correlati