2013-04-22 34 views
5

我嘗試搭建一個if語句來檢查表是否已經創建。我只想創建一個表,但現在我每次單擊按鈕存儲信息時都會創建一個表。有什麼建議麼?檢查表中是否存在if語句在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]; 

    } 

我試圖讓出存儲在一個命名爲lagredeGjester看到在DataGridView中XLM的信息。

更新問題:

現在我寫了這樣的代碼:

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"); 

     } 

    } 

在我第一次運行我輸入了兩個不同的infomations和按我的按鈕。這兩個信息都在我想要的表格中。但我似乎無法正確地寫我的if語句。當我運行上面的代碼時,它使用了一個空的XML(沒有表),但是隻要創建了「Gjester」表,就會說「名爲Gjester的DataTable已經屬於這個DataSet」。但是,這不是我如果聲明應該防止的嗎?正如我現在寫的,它不應該只是添加信息,而不是嘗試創建一個新表?

回答

8

可以檢查通過:

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

OR

if(dt.Rows.Count == 0) 

OR

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

我想你最後的建議,但我得到的是「無法隱式轉換類型System.Data.DataTable到BOOL」 – Praise 2013-04-22 12:17:20

+0

在哪個替代方案你有這個錯誤? – Freelancer 2013-04-22 12:18:08

+0

@MariusMathisen試試我編輯的最後一個選項 – Freelancer 2013-04-22 12:20:48

2

一個可能的解決方案是定義DataSet出來的功能。然後檢查數據集中的表的數量。

DataSet ds = new DataSet(); 

private void InitDataTable() 
{ 
    DataTable dt; 

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

    dt = new DataTable(); 

    //your code 
} 
+0

我仍然創建一個新表。爲什麼dt = ds.Tables [0]? – Praise 2013-04-22 12:19:00

+0

@MariusMathisen如果數據集有一個數據表,它不會創建一個新表。它使用現有的。 – 2013-04-22 12:23:13

+0

我更新了我的問題。看看你是否願意。 :) – Praise 2013-04-22 14:19:05

1

您還可以擴展數據集來添加方法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

請詳細解釋一下,我把這個方法放在函數裏面嗎?然後什麼? – Praise 2013-04-22 14:59:10

相關問題