1

私はこのような機能を持っていました

con.Open();
int k = 1;
OleDbCommand cmd1 = new OleDbCommand("select MAX (CUT_ID) from CUTORDER_MASTER ", con);
OleDbDataReader rdr = cmd1.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(rdr);
if (dt != null)
{
    if (int.Parse(dt.Rows[0][0].ToString()) != 0)
    {
        k = int.Parse(dt.Rows[0][0].ToString()) + 1;
    }

}

私の問題は、クエリによって取得された値がない場合、データ テーブルが値のないセル max(cutid) を返すことです。したがって、null チェックをスキップし、O チェックとコードが到達した場合 k = int.Parse(dt.Rows[0][0].ToString()) + 1;
、例外の不正な形式が発生します。

この問題を解決し、データ テーブルが空かどうかを確認する方法はありますか

4

5 に答える 5

3

の代わりにメソッドをExecuteReader()使用ExecuteScalar()し、結果を変数に格納します。次に、この変数で null チェックを行います。データテーブル インスタンスをチェックしています。実際には、このシナリオではデータテーブルを使用する必要はありません。

データテーブルで確認したい場合datatable.rows.count() methodは、データテーブルに入力されている行数を確認するために使用します。

于 2013-08-15T06:52:04.313 に答える
2

まず第一に、私の質問は、なぜ datatable を使用して単一の値を取得するのかということです。ExecuteScalarに慣れていない場合は、これについて読んでください。将来的にも役立ちます。さて、あなたが使用したシナリオに来てください:

それを行うにはいくつかの方法があります:

結果に空の値ではなく0を含める場合:

1) 以下のようにデータベースから取得できます。

select IsNull(MAX(CUT_ID), 0) from CUTORDER_MASTER

2) コードを使用:

if (dt != null)
{
    if (int.Parse(dt.Rows[0][0].ToString()) != null && 
        int.Parse(dt.Rows[0][0].ToString()) != "")
    {
        k = int.Parse(dt.Rows[0][0].ToString()) + 1;
    }
}

3) コードを使用:

if (dt != null)
{
    if(dt.Rows.Count > 0)
    {
        if (int.Parse(dt.Rows[0][0].ToString()) != null && 
            int.Parse(dt.Rows[0][0].ToString()) != "")
        {
            k = int.Parse(dt.Rows[0][0].ToString()) + 1;
        }
    }
}

などなど。

于 2013-08-15T06:59:38.687 に答える
1
select count(*) from CUTORDER_MASTER    

テーブルにデータがない場合、これも0を返します;)

于 2013-08-15T06:44:55.667 に答える