2013-04-22 23 views
5

Provo a mettere un'istruzione if per verificare se una tabella è già stata creata. Voglio creare solo una tabella, ma come ora creo un tavolo ogni volta che clicco sul pulsante per memorizzare le informazioni. Eventuali suggerimenti?Controlla se la tabella esiste con if istruzione in C#?

DataTable dt; 

    private void InitDataTable() 
    { 

     if() { 

     } 

     dt = new DataTable(); 
     DataSet ds = new DataSet(); 
     ds.ReadXml("gjesteInfo.xml"); 
     ds.Tables.Add(dt); 

     DataColumn dc1 = new DataColumn("Fullt navn"); 
     DataColumn dc2 = new DataColumn("Start dato"); 
     DataColumn dc3 = new DataColumn("Antall dager"); 

     dt.Columns.Add(dc1); 
     dt.Columns.Add(dc2); 
     dt.Columns.Add(dc3); 

     dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text); 

     ds.Merge(dt); 

     ds.WriteXml("gjesteInfo.xml"); 

    } 



    private void lagre_Click(object sender, EventArgs e) 
    { 

     InitDataTable(); 

     gjesterutenrom.Items.Add(gjestenavnInput.Text); 

     gjestenavnInput.Text = ""; 
     datoInnsjekk.Text = ""; 
     antallDager.Text = ""; 

     DataSet onClick = new DataSet(); 
     onClick.ReadXml("gjesteInfo.xml"); 
     lagredeGjester.DataSource = onClick.Tables[0]; 

    } 

cerco di uscire le informazioni memorizzate nel XLM con un DataGridView chiamato lagredeGjester come visto sopra.

domanda aggiornato:

Ora ho scritto il codice come questo:

DataTable dt; 

    DataSet ds = new DataSet(); 

    private void InitDataTable() 
    { 


     if(ds.Tables.Contains("Gjester") ) 
     { 
      dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text); 
      ds.Merge(dt); 

      ds.WriteXml("gjesteInfo.xml"); 

     } 
     else { 

      dt = new DataTable("Gjester"); 

      ds.ReadXml("gjesteInfo.xml"); 
      ds.Tables.Add(dt); 

      DataColumn dc1 = new DataColumn("Fullt navn"); 
      DataColumn dc2 = new DataColumn("Start dato"); 
      DataColumn dc3 = new DataColumn("Antall dager"); 

      dt.Columns.Add(dc1); 
      dt.Columns.Add(dc2); 
      dt.Columns.Add(dc3); 

      dt.Rows.Add(gjestenavnInput.Text, datoInnsjekk.Text, antallDager.Text); 
      ds.Merge(dt); 

      ds.WriteXml("gjesteInfo.xml"); 

     } 

    } 

Nel mio primo run ho inserito due infomations diverse e premuto il mio tasto. Entrambe le informazioni si sono trovate nello stesso tavolo che volevo. Ma non riesco a scrivere correttamente la mia dichiarazione if. Quando eseguo il codice sopra, funziona con un XML vuoto (senza tabelle), ma finché viene creata la tabella "Gjester" dice "Un DataTable chiamato 'Gjester' appartiene già a questo DataSet." Ma non è questo che dovrebbe impedire la mia affermazione se? Come ho scritto ora, non dovrebbe solo aggiungere le informazioni e non provare a creare un nuovo tavolo?

risposta

8

possibile controllare tramite:

if(ds.Tables.Contains("tablename")) 

O

if(dt.Rows.Count == 0) 

O

int flag=0; 
try 
{ 

    if(ds.Tables["tablename"].Rows.Count>0) 
    { 
     // execute something 
    } 
} 
catch(Exception ex) 
{ 
flag=1; 
} 

if(flag==1) 
{ 
    messagebox.show("Table does not exists"); 
} 
+0

vi provato ultimo suggerimento, ma tutto quello che ottiene è "Impossibile convertire implicitamente il tipo System.Data.DataTable di Bool" – Praise

+0

su quale alternativa hai ottenuto questo errore? – Freelancer

+0

@MariusMathisen prova la mia ultima opzione modificata – Freelancer

2

Una possibile soluzione potrebbe essere quella di definire il DataSet fuori della funzione. Quindi controllare il numero di tabelle nel set di dati.

DataSet ds = new DataSet(); 

private void InitDataTable() 
{ 
    DataTable dt; 

    if(ds.Tables.Count > 0) 
    { 
     dt = ds.Tables[0]; 
    } 

    dt = new DataTable(); 

    //your code 
} 
+0

Creo ancora una nuova tabella. Perché il dt = ds.Tables [0]? – Praise

+0

@MariusMathisen se il set di dati ha un datatable non creerà una nuova tabella. Usa quello esistente. –

+0

Ho aggiornato la mia domanda. Dai un'occhiata se vuoi. :) – Praise

1

È inoltre possibile estendere DataSet per aggiungere un metodo FetchOrCreate()

public static DataTable FetchOrCreate(this DataSet ds, string tableName) 
    { 
     if (ds.Tables.Contains(tableName)) 
      return ds.Tables[tableName]; 
     // ------------------------------- 
     var dt = new Datatable(tableName); 
     ds.Tables.Add(dt); 
     return dt;   
    } 
+0

Per favore spieghi di più, metto questo metodo all'interno della funzione? E poi cosa? – Praise