20. april 2005 - 16:41Der 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";
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?
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();
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.
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.
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.
;) eller bare en funktion der scannede ens indlæg igennem og hvis det eneste indhold var "svar" burde det automatisk blive lavet til svar ;)
Synes godt om
Ny brugerNybegynder
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.