10

テーブルが既に作成されているかどうかを確認する if ステートメントを作成しようとしています。テーブルを 1 つだけ作成したいのですが、現状では、ボタンをクリックして情報を保存するたびにテーブルを作成します。助言がありますか?

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

        }

    }

最初の実行では、2 つの異なる情報を入力してボタンを押しました。両方の情報が、希望どおりに同じテーブルに表示されました。しかし、if ステートメントを正しく記述できないようです。上記のコードを実行すると、空の XML (テーブルなし) で動作しますが、「Gjester」テーブルが作成されている限り、「「Gjester」という名前の DataTable は既にこの DataSet に属しています」と表示されます。しかし、これは私のif文が防ぐべきものではありませんか? 私が今書いたように、情報を追加するだけで、新しいテーブルを作成しようとしないでください。

4

3 に答える 3

14

次の方法で確認できます。

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");
}
于 2013-04-22T11:57:11.043 に答える
3

可能な解決策はDataSet、関数の out を定義することです。次に、データセット内のテーブルの数を確認します。

DataSet ds = new DataSet();

private void InitDataTable()
{
    DataTable dt;

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

    dt = new DataTable();

    //your code
}
于 2013-04-22T11:57:52.257 に答える