как проверить, что dataset пуст?

<p>я изменяю чужой код, где выполняется запрос, используя следующее:</p><pre><code>dataset ds = new dataset(); sqldataadapter da = new sqldataadapter(sqlstring, sqlconn); da.fill(ds); </code></pre><p>как я могу сказать, что dataset пуст (то есть, никаких результатов не было возвращено)?</p>

<p>если я правильно понимаю, это должно работать для вас</p><pre><code>if (ds.tables[0].rows.count == 0) { // } </code></pre>

<p>вам не нужно проверять набор данных. </p><p>метод <code>fill()</code> возвращает количество добавленных строк. </p><p>см. <a href="http://msdn.microsoft.com/en-us/library/aa325448%28v=vs.71%29.aspx">метод dbdataadapter.fill (dataset)</a> </p>

<p>это неверный ответ, так как он дает следующую ошибку</p><blockquote> <p>не могу найти таблицу 0.</p> </blockquote><p>вместо этого используйте следующее утверждение</p><pre><code>if (ds.tables.count == 0) { //dataset is empty } </code></pre>

<p>вы должны перебрать все таблицы и проверить, равен ли table.rows.count 0</p><pre><code>bool isempty(dataset dataset) { foreach(datatable table in dataset.tables) if (table.rows.count != 0) return false; return true; } </code></pre><p>обновление: поскольку datatable может содержать удаленные строки <code>rowstate = deleted</code>, в зависимости от того, что вы хотите достичь, было бы неплохо вместо этого проверить <code>defaultview</code> (который не содержит удаленных строк).</p><pre><code>bool isempty(dataset dataset) { return !dataset.tables.cast<datatable>().any(x => x.defaultview.count > 0); } </code></pre>

<p>мы можем проверить всего тремя способами.</p><ol> <li><code>if(ds != null)</code></li> <li><code>if(ds.tables.count > 0 )</code></li> <li><code>if(ds.tables[0].rows.count > 0)</code></li> </ol>

<p>этот код покажет ошибку типа <code>table[0] can not be found!</code> , потому что в позиции 0 не будет никакой таблицы.</p><pre><code>if (ds.tables[0].rows.count == 0) { // } </code></pre>

<p>чтобы проверить, набор данных пуст или нет, вы должны проверить ноль и количество таблиц.</p><pre><code>dataset ds = new dataset(); sqldataadapter da = new sqldataadapter(sqlstring, sqlconn); da.fill(ds); if(ds != null && ds.tables.count > 0) { // your code } </code></pre>

<p>при возврате результатов запроса sql я обнаружил, что таблицы [0] существуют, но в них нет нулевых строк. так что в моей ситуации это сработало:</p><p>if (ds.tables [0] .rows.count == 0) // пусто</p><p>это не сработало:</p><p>if (ds.tables.count == 0)</p>

<p><code>fill</code> - команда всегда возвращает количество записей, вставленных в набор данных. </p><pre><code>dataset ds = new dataset(); sqldataadapter da = new sqldataadapter(sqlstring, sqlconn); var count = da.fill(ds); if(count > 0) { console.write("it is not empty"); } </code></pre>

<pre><code> mysqldataadapter adap = new mysqldataadapter(cmd); dataset ds = new dataset(); adap.fill(ds); if (ds.tables[0].rows.count == 0) { messagebox.show("no result found"); } </code></pre><p>запрос получит данные в наборе данных, а затем мы проверим набор данных, который является пустым или содержит некоторые данные. для этого мы делаем ds.tables [0] .rows.count == o будет подсчитывать количество строк в наборе данных. если указанное выше условие истинно, то набор данных, т.е. ds, пуст.</p>

<p>не забудьте установить имя таблицы da.fill (ds, "имя\_таблица");</p><p>таким образом, вы возвращаете данные, используя имя таблицы вместо 0 </p><pre><code>if (ds.tables["tablename"].rows.count == 0) { messagebox.show("no result found"); } </code></pre>