Avatar billede hojgaard Nybegynder
25. september 2003 - 16:15 Der er 12 kommentarer og
1 løsning

Konvertere databaser

Hej

Normalt forbinder man til en specifik database.
Er det muligt at liste alle databaser på en server?

Jeg vil gerne lave et program hvor man får listet alle databaser på serveren, vælge en database/tabel, og få eksporteret indhold ud i XML.

Er det muligt?
Avatar billede arne_v Ekspert
25. september 2003 - 16:19 #1
Nej.

Men du kan normalt få listet alle databaser på samme database server.

Eksempler:

* du har ikke en chance for at finde ud af om jeg har konfiguereret en
  SQLServer til at køre på port 14033

* det er muligt at få listet alle databaser der er på en SQLServer som
  kører normalt på port 1433.
Avatar billede hojgaard Nybegynder
25. september 2003 - 16:23 #2
Det er præcis det jeg prøvede at beskrive :o)
Jeg vil gerne have listet alle databaser på samme database server. Jeg kender allerede porten, så det er ikke noget problem.

Spørgsmålet er så, hvordan kan jeg få databaserne listet?
Nogle gode links eller hints?
Avatar billede arne_v Ekspert
25. september 2003 - 16:27 #3
En måde er:
* connect til master databasen
* kald stored procedure sp_databases

Den vil liste alle database.

Der er muligvis også andre måder at gøre det på.
Avatar billede hojgaard Nybegynder
25. september 2003 - 16:30 #4
Tak for hjælpen arne_v :o)
Avatar billede arne_v Ekspert
25. september 2003 - 16:44 #5
Du har sikkert allerede lavet koden.

Men hvis ikke så er her lidt C#:

using System;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=master");
        con.Open();
        SqlCommand cmd = new SqlCommand("sp_databases", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string tblnam = (string)rdr[0];
            Console.WriteLine(tblnam);
        }
        con.Close();
    }
}
Avatar billede hojgaard Nybegynder
25. september 2003 - 17:35 #6
Jep, har allerede fået det op at køre, men tak alligevel :o)

Dog er jeg rendt ind i et lille problem. Er det ikke muligt at frasortere alle system-tabeller, så kun mine egne tabeller bliver listet?
Avatar billede nielslbeck Nybegynder
25. september 2003 - 17:40 #7
Så skal parameteren TABLE_TYPE i sp_tables sættes til 'TABLE' - så får du kun dine egne tabeller :-)
Avatar billede hojgaard Nybegynder
25. september 2003 - 18:22 #8
Tak for hjælpen nielslbeck... men når jeg sætter table_type til table, så får jeg ingen resultater. Jeg gør følgende:

SqlConnection myConnection = new SqlConnection(source);
myConnection.Open();

SqlCommand cmd = new SqlCommand(@"dbo.sp_tables", myConnection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@table_type", SqlDbType.VarChar).Value = "TABLE";
SqlDataReader dr = cmd.ExecuteReader();

while(dr.Read())
    TableListbox.Items.Add(dr["TABLE_NAME"].ToString());

dr.Close();
myConnection.Close();
Avatar billede arne_v Ekspert
25. september 2003 - 18:24 #9
cmd.Parameters.Add("@table_type", "'TABLE'");;
Avatar billede nielslbeck Nybegynder
25. september 2003 - 18:24 #10
Yeps, det lyder nok lidt sjovt, men de to "'"'er skal være med, dvs at du skal skrive:

cmd.Parameters.Add("@table_type", SqlDbType.VarChar).Value = "'TABLE'";

vil jeg da mene... Når jeg udfører den direkte skriver jeg i hvert fald:

EXEC sp_tables @TABLE_TYPE = "'TABLE'"
Avatar billede arne_v Ekspert
25. september 2003 - 18:25 #11
Det her komplette eksempel kører hos mig:

using System;
using System.Data;
using System.Data.SqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        SqlConnection con = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=master");
        con.Open();
        SqlCommand cmd = new SqlCommand("sp_databases", con);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            string dbnam = (string)rdr[0];
            Console.WriteLine("Database=" + dbnam);
            SqlConnection con2 = new SqlConnection("server=ARNEPC2;Integrated Security=SSPI;database=" + dbnam);
            con2.Open();
            SqlCommand cmd2 = new SqlCommand("sp_tables", con2);
            cmd2.CommandType = CommandType.StoredProcedure;
            cmd2.Parameters.Add("@table_type", "'TABLE'");
            SqlDataReader rdr2 = cmd2.ExecuteReader();
            while(rdr2.Read()) {
                string tblnam = (string)rdr2[2];
                Console.WriteLine(dbnam + " " + tblnam);
            }
            con2.Close();
        }
        con.Close();
    }
}
Avatar billede arne_v Ekspert
25. september 2003 - 18:25 #12
[jeg burde nok ikke lave en connection per database, men ...]
Avatar billede hojgaard Nybegynder
25. september 2003 - 18:30 #13
HELT PERFEKT!

Nu kører det som det skal... tak for hjælpen!
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