Avatar billede everclear Praktikant
12. februar 2010 - 13:02 Der 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;

return script;

Hvordan får jeg mine data med ud i SQL-scriptet?
Avatar billede janus_007 Nybegynder
12. februar 2010 - 20:02 #1
tjaa... hvad med nogle selects på de objekter du har?
Avatar billede everclear Praktikant
12. februar 2010 - 20:25 #2
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.
Avatar billede arne_v Ekspert
14. februar 2010 - 00:08 #3
Det er ikke specielt logisk.

using System;
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();
            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'.
Avatar billede everclear Praktikant
14. februar 2010 - 00:56 #4
Din løsning med at bruge en Scripter fremfor en Transfer spiller perfekt Arne :)

Du er som altid en gud når man er i knibe!:)

Tusinde tak for hjælpen - hvis du lige smider et svar, så er der point :)
Avatar billede arne_v Ekspert
14. februar 2010 - 01:08 #5
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester