Avatar billede nat Nybegynder
20. april 2005 - 16:41 Der er 13 kommentarer og
2 løsninger

Eksportere en sql tabel til en tekst fil

Jeg har en form med en knap, og når jeg trykker på denne vil jeg gerne selectere alt i den angivne database og eksportere det til en komma separeret fil. Hvordan gør jeg det?

Jeg har:

private void button2_Click(object sender, System.EventArgs e)
        {
            //Eksportere tabel til tekstfil
            SqlCommand myCommand = new SqlCommand();
            myCommand.CommandText = "select * from database1";   
           
           
                       

        }
Avatar billede nielle Nybegynder
20. april 2005 - 18:03 #1
Hvilken database bruger du? SqlCommand er til SQL Server og dur f.eks. ikke til MS Access (hvor man bruger OleDbCommand fra System.Data.OleDb - eller OdbcCommand fra System.Data.Odbc).

Er det din database som hedder "database1" eller er dette blot en tabel i databasen? Måske har du en enkelt database med en enkelt tabel i?
Avatar billede burningice Nybegynder
20. april 2005 - 18:47 #2
hvad med

private void button2_Click(object sender, System.EventArgs e)
        {
            SqlDataAdaper adapter = new SqlDataAdapter("select * from database1", dinConnecton);
            DataTable dt = new DataTable();
            dinConnecton.Open();
            adapter.Fill(dt);
            conn.Close();


            StringBuilder sb = new StringBuilder();
           
            foreach (DataRow dr in dt.Rows) {
              foreach (DataColumn dc in dt.Columns{
                  sb.Append(dr[dc] +",");
              }

              sb.Remove(sb.Length-1, 1);
              sb.Append("\n");
            }

            dinFil.Write(sb.ToString());                     

        }
Avatar billede nat Nybegynder
21. april 2005 - 12:44 #3
nielle: Det er en sql, og det er tabellen
Avatar billede nat Nybegynder
21. april 2005 - 12:45 #4
cyberfessor: okay, men dinFil hvad refererer den til?
Avatar billede burningice Nybegynder
21. april 2005 - 13:44 #5
Typisk en FileStream... kan laves på denne måde:

FileStream fs = File.Open("enFil.txt", FileMode.Open);
Avatar billede nat Nybegynder
21. april 2005 - 14:35 #6
cyberfessor: men hvor kommer dinFil så ind henne???
Avatar billede burningice Nybegynder
21. april 2005 - 17:30 #7
private void button2_Click(object sender, System.EventArgs e)
        {
            SqlDataAdaper adapter = new SqlDataAdapter("select * from database1", dinConnecton);
            DataTable dt = new DataTable();
            dinConnecton.Open();
            adapter.Fill(dt);
            conn.Close();


            StringBuilder sb = new StringBuilder();
         
            foreach (DataRow dr in dt.Rows) {
              foreach (DataColumn dc in dt.Columns{
                  sb.Append(dr[dc] +",");
              }

              sb.Remove(sb.Length-1, 1);
              sb.Append("\n");
            }
           
            FileStream fs = File.Open("enfil.txt", FileMode.Open);
            StreamWriter dinFil = new StreamWriter(fs);
            dinFil.Write(sb.ToString());

            dinFil.Close();
        }

sådan
Avatar billede nielle Nybegynder
21. april 2005 - 19:04 #8
string ConnStr = "...";
SqlConnection Conn = new SqlConnection(ConnStr);
Conn.Open();

string SQL = "SELECT * FROM database1";
SqlCommand DbCommand = Conn.CreateCommand();
DbCommand.CommandText = SQL;

using (StreamWriter SW = new StreamWriter(@"c:\database1.csv"))
{
    SqlDataReader DataReader = DbCommand.ExecuteReader();
    while (DataReader.Read())
    {
        object[] Values = new object[DataReader.FieldCount];
        DataReader.GetValues(Values);

        string[] StrValues = new string[DataReader.FieldCount];

        for (byte Idx=0; Idx<DataReader.FieldCount; Idx++)
            StrValues[Idx] = Values[Idx].ToString();

        SW.WriteLine(string.Join(",", StrValues));
    }
    DataReader.Close();
}

Conn.Close();
Avatar billede nielle Nybegynder
21. april 2005 - 19:05 #9
En løsning baseret på en SqlDataReader i stedet for en SqlDataAdaper - kræver både mindre hulommelse og er hurtigere - samt en StreamWriter i stedet for en FileStream.
Avatar billede burningice Nybegynder
21. april 2005 - 21:00 #10
nu er det sådan set også en streamwriter jeg bruger, opretter den bare igennem en FileStream (hvilket også er det der sker internt i StreamWriter-klassen hvis man bruger en fil som argument.

Man kan godt argumentere for at en Reader er hurtigere end at kopiere sine data ind i en DataTable først, men jeg synes nu også koden bliver derefter.
Avatar billede nielle Nybegynder
21. april 2005 - 21:20 #11
cyberfessor> Jeg synes faktisk at både din og min løsning har hvert deres par punkter, hvor de er hhv. smukke og grimme. Der er ikke nogen af dem som vinder i lige denne her sammenhæng.

Mht. at bruge den ene eller anden løsning, er min grundlæggende holdning at man skal vælge det rigtige værktøj til opgaven; Reader er direkte skabt til denne type af opgaver, hvor man altså starter med den første række og så løber man dem alle sammen igennem i sekventiel rækkefølge, hvorefter at man er færdig.

En DataTable er derimod rettet mod opgaver hvor man har brug for at have hele tabellen tilgængelig fordi man f.eks. ønsker at kunne hoppe frem og tilbage imellem posterne, eller opdatere rækker, eller fordi at man har i sinde at lave andre datamanipulationer som f.eks. at joine med andre DataTable’s. Den slags udvidet funktionalitet koster i både CPU og RAM.
Avatar billede nat Nybegynder
25. april 2005 - 14:23 #12
Smider I lige et svar
Avatar billede nielle Nybegynder
25. april 2005 - 16:13 #13
Svar.
Avatar billede nielle Nybegynder
25. april 2005 - 16:14 #14
Det burde da ikke være så svært at huske at klikke af i "Svar"... :^|
Avatar billede burningice Nybegynder
25. april 2005 - 19:06 #15
;) eller bare en funktion der scannede ens indlæg igennem og hvis det eneste indhold var "svar" burde det automatisk blive lavet til 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