2010-06-04 65 views
38

estoy modificar el código de otra persona, donde se realiza una consulta utilizando la siguiente:¿Cómo probar si un DataSet está vacío?

DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn); 
da.Fill(ds); 

¿Cómo puedo saber si el conjunto de datos está vacía (es decir, no hay resultados fueron devueltos)?

Respuesta

53

Si he entendido bien, esto debería funcionar para usted

if (ds.Tables[0].Rows.Count == 0) 
{ 
    // 
} 
+0

Supongo que si la consulta utiliza varias tablas, esto no funcionaría correctamente. – MCS

+0

Ah, pero un simple bucle sobre el recuento de tablas que toman el recuento de filas de cada uno sería simple de codificar. Yo digo que arroje ese cheque también. – jcolebrand

+1

¿Qué pasa con ds.Tables.Count? – captainsac

19

No es necesario que pruebe el conjunto de datos.

El método Fill() devuelve el n. ° de filas agregadas.

Ver DbDataAdapter.Fill Method (DataSet)

+0

Desearía poder utilizar esto, pero el código que llena el conjunto de datos es parte de un método que devuelve el conjunto de datos completo. El código que estoy escribiendo llama al método como este DataSet ds = GetResults (sql, conn). – MCS

+1

Alinear filas y filas de recuento definitivamente funcionará, pero echa un vistazo a la propiedad ExtendedProperties de DataSet, que le permitirá establecer este tipo de información personalizada desde GetResults() y usarla a su regreso. Puede que no sea aplicable aquí, pero tal vez en el futuro. – Tom

+0

'Fill()' realmente solo devuelve el n. ° de filas para la primera tabla en el DataSet. Si hay varias tablas en el conjunto de datos, no devuelve el número total real de filas. –

14

Debe bucle a través de todas las tablas y prueba si es table.Rows.Count 0

bool IsEmpty(DataSet dataSet) 
{ 
    foreach(DataTable table in dataSet.Tables) 
     if (table.Rows.Count != 0) return false; 

    return true; 
} 

Actualización: dado que un DataTable podría contener filas borradas RowState = Deleted, dependiendo de lo que quiera lograr, podría ser una buena idea verificar el DefaultView en su lugar (que no contiene filas eliminadas).

bool IsEmpty(DataSet dataSet) 
{ 
    return !dataSet.Tables.Cast<DataTable>().Any(x => x.DefaultView.Count > 0); 
} 
1

Este código se mostrará un error como Table[0] can not be found! porque no habrá ninguna mesa en posición 0.

if (ds.Tables[0].Rows.Count == 0) 
{ 
    // 
} 
-3
If (ds != null) 

debe hacer el trabajo por usted!

14

No es una respuesta válida, ya que da siguiente error

Cannot find table 0.

utilizar la siguiente instrucción en lugar

if (ds.Tables.Count == 0) 
{ 
    //DataSet is empty 
} 
+1

La sugerencia de Ur está funcionando para mí, Gracias :) –

0
MySqlDataAdapter adap = new MySqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
adap.Fill(ds); 
if (ds.Tables[0].Rows.Count == 0) 
{ 
     MessageBox.Show("No result found"); 
} 

consulta recibirá los datos en conjunto de datos y después comprobaremos el conjunto de datos que está vacío o tiene algunos datos en él. para eso hacemos ds.tables [0] .Rows.Count == o esto contará el número de filas que están en el conjunto de datos. Si la condición anterior es verdadera, entonces el conjunto de datos, es decir, ds, está vacío.

+1

por favor, agregue alguna explicación a su código. –

+0

respuesta está en el conjunto de datos que recibe la fila o no. simplemente verifique si el número de filas es cero o no. – NomanJaved

4

Podemos verificar el total de tres maneras.

  1. si (ds! = Null)
  2. si (ds.Tables.Count> 0)
  3. si (ds.Tables [0] .Rows [0] .Count> 0)
+1

puede ser seguro hacer las tres comprobaciones. el tercer enunciado debe ser ds.Tables [0] .Rows.Count> 0 – Samuel

+1

El tercero (ds.Tables [0] .Rows.Count> 0) arroja el siguiente error: No se puede encontrar la tabla 0. –

0

No olvides establecer el nombre de la tabla da.Fill (ds, "nombre de tabla");

Así que devolver los datos utilizando el nombre de tabla en lugar de 0

if (ds.Tables["tablename"].Rows.Count == 0) 
{ 
    MessageBox.Show("No result found"); 
} 
0

Cuando regresan los resultados de la consulta SQL que encuentran que las tablas [0] existe, pero tiene cero filas. Así que en mi situación esto funcionó:

si (ds.Tables [0] .Rows.Count == 0) // vacío

Esto no funcionó:

si (ds.Tables.Count == 0)

0

Para verificar que el conjunto de datos está vacío o no, debe verificar el conteo nulo y de tablas.

DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn); 
da.Fill(ds); 
if(ds != null && ds.Tables.Count > 0) 
{ 
// your code 
} 
0

Fill es comando devuelve siempre el número de registros inserta en el conjunto de datos.

DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn); 
var count = da.Fill(ds); 
if(count > 0) 
{ 
    Console.Write("It is not Empty"); 
} 
Cuestiones relacionadas