次を使用してクエリが実行される他の人のコードを変更しています:
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
DataSetが空(つまり、結果が返されなかった)かどうかを確認するにはどうすればよいですか?
私が正しく理解すれば、これはあなたのために働くはずです
if (ds.Tables[0].Rows.Count == 0)
{
//
}
次のエラーが発生するため、有効な回答ではありません
テーブル0が見つかりません。
代わりに次のステートメントを使用してください
if (ds.Tables.Count == 0)
{
//DataSet is empty
}
すべてのテーブルをループして、table.Rows.Countが0かどうかをテストする必要があります
bool IsEmpty(DataSet dataSet)
{
foreach(DataTable table in dataSet.Tables)
if (table.Rows.Count != 0) return false;
return true;
}
更新:DataTableには削除された行が含まれる可能性があるためRowState = Deleted
、達成したい内容に応じて、代わりにDefaultView
(削除された行を含まない)をチェックすることをお勧めします。
bool IsEmpty(DataSet dataSet)
{
return !dataSet.Tables.Cast<DataTable>().Any(x => x.DefaultView.Count > 0);
}
合計3つの方法を確認できます。
if(ds != null)
if(ds.Tables.Count > 0 )
if(ds.Tables[0].Rows.Count > 0)
データセットが空かどうかを確認するには、nullとテーブルカウントを確認する必要があります。
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
if(ds != null && ds.Tables.Count > 0)
{
// your code
}
位置0にはテーブルがないため、このコードはTable[0] can not be found!
のようなエラーを表示します。
if (ds.Tables[0].Rows.Count == 0)
{
//
}
SQLクエリから結果を返すと、tables [0]が存在するが、行がゼロであることがわかります。だから私の状況では、これはうまくいきました:
if(ds.Tables [0] .Rows.Count == 0)//空
これは機能しませんでした:
if(ds.Tables.Count == 0)
Fill
は、データセットに挿入されたレコードの数を常に返すコマンドです。
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
var count = da.Fill(ds);
if(count > 0)
{
Console.Write("It is not Empty");
}
MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
DataSet ds = new DataSet();
adap.Fill(ds);
if (ds.Tables[0].Rows.Count == 0)
{
MessageBox.Show("No result found");
}
クエリはデータセットのデータを受信し、空のデータセットまたはデータが含まれているデータセットを確認します。そのために、ds.tables [0] .Rows.Count == oを実行します。これにより、データセットにある行の数がカウントされます。上記の条件が当てはまる場合、データセット、つまりdsは空です。
テーブル名を設定することを忘れないでくださいda.Fill(ds、 "tablename");
したがって、0ではなくテーブル名を使用してデータを返します
if (ds.Tables["tablename"].Rows.Count == 0)
{
MessageBox.Show("No result found");
}