繁体   English   中英

用C#中的if语句检查表是否存在?

[英]Check if table exists with if statement in C#?

我尝试建立一个if语句来检查是否已创建表。 我只想创建一个表,但是现在,每次单击按钮来存储信息时,我都会创建一个表。 有什么建议么?

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

        }

    }

在第一次跑步时,我输入了两个不同的信息,然后按了我的按钮。 这两个信息都放在我想要的同一个表中。 但是我似乎无法正确编写我的if语句。 当我运行上面的代码时,它使用的是空XML(没有表),但是只要创建了“ Gjester”表,它就会说“一个名为'Gjester'的数据表已经属于此DataSet”。 但这不是我的if语句应该防止的吗? 正如我现在所写,它不应该只是添加信息而不尝试创建新表吗?

可以通过以下方式检查:

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

要么

 if(dt.Rows.Count == 0)

要么

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

一种可能的解决方案是在函数之外定义DataSet 然后检查数据集中的表数。

DataSet ds = new DataSet();

private void InitDataTable()
{
    DataTable dt;

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

    dt = new DataTable();

    //your code
}

您还可以扩展DataSet来添加方法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;          
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM