2011-09-13 13 views
6

Estoy tratando de obtener los datos de base de datos utilizando el código de abajo .....problema con conseguir los datos de la base de datos

si no hay datos en la tabla siempre se va al esta declaración

estoy usando conector mysql.net para obtener los datos y yo estoy haciendo WinForms aplicaciones usando C#

 public DataTable sales(DateTime startdate, DateTime enddate) 
    { 
     const string sql = @"SELECT memberAccTran_Source as Category, sum(memberAccTran_Value) as Value 
           FROM memberacctrans 
           WHERE memberAccTran_DateTime BETWEEN @startdate AND @enddate 
           GROUP BY memberAccTran_Source"; 

     return sqlexecution(startdate, enddate, sql); 
    } 

y el código de abajo es para el retorno sqlexceution ... .. función

private static DataTable sqlexecution(DateTime startdate, DateTime enddate, string sql) 
{ 
     var table = new DataTable(); 
     using (var conn = new MySql.Data.MySqlClient.MySqlConnection(connectionstring)) 
     { 
      conn.Open(); 

      var cmd = new MySql.Data.MySqlClient.MySqlCommand(sql, conn); 

      var ds = new DataSet(); 

      var parameter = new MySql.Data.MySqlClient.MySqlParameter("@startdate", MySql.Data.MySqlClient.MySqlDbType.DateTime); 
      parameter.Direction = ParameterDirection.Input; 
      parameter.Value = startdate.ToString(dateformat); 
      cmd.Parameters.Add(parameter); 

      var parameter2 = new MySql.Data.MySqlClient.MySqlParameter("@enddate", MySql.Data.MySqlClient.MySqlDbType.DateTime); 
      parameter2.Direction = ParameterDirection.Input; 
      parameter2.Value = enddate.ToString(dateformat); 
      cmd.Parameters.Add(parameter2); 

      var da = new MySql.Data.MySqlClient.MySqlDataAdapter(cmd); 

      da.Fill(ds); 
      try 
      { 
       table = ds.Tables[0]; 

      } 
      catch 
      { 
       table = null; 
      } 
     } 
     return table; 
    } 

incluso si no hay datos de la voluntad el flujo de proceso pasa a esta línea

TABLE = ds.Tables [0];

¿Cómo puedo reducir esto .....

haría cualquier pls ayuda en esto ....

+0

qué ru dando por voto ... –

+0

Ha considerado el uso un ORM, por ejemplo Linq a SQL Entidades o EF? – James

+0

no .. tengo que usar este ... –

Respuesta

4

En su caso si usted es pensar que bloque catch conseguirá si hay excuted no hay ninguna fila disponible de lo que está mal porque incluso si no hay datos una vez que la consulta de selección se obtiene expelida sin excepción, crea una tabla de datos con las columnas pero sin filas.

para esto, creo que puede hacer uso de la propiedad ds.table[0].rows.count que devuelve 0 si no hay una fila en la tabla de datos.

if (ds.Tables[0].Rows.Count > 0) 
    table = ds.Tables[0]; 
else 
    table=null; 
+0

La propiedad Filas de DataTable es nula cuando no hay filas: http://msdn.microsoft.com/en-US/library/system.data.datatable.rows.aspx – stuartd

+1

@Stuart Dunkeld: es mejor que ejecute el código y compruébelo usted mismo y si es posible elimine su downvote una vez que haya terminado con la comprobación –

+0

¿La documentación de MSDN es incorrecta o confusa? – stuartd

3

Devuelve una tabla vacía. Este es un comportamiento común. Si usted quiere tener nula mesa debe comprobar para el recuento de filas:

If (ds.Tables[0].Rows.Count >. 0) 
    table = ds.Tables[0]; 
Else 
    table=0 
+0

Muchas gracias ...sascha está trabajando ahora –

3

No estoy realmente seguro de lo que estás pidiendo aquí ... supongo que quieres que salte la tabla = ds.Tables [0] línea si no hay datos?

si ése es el caso de un try/catch no funcionará, ya que suele producir una excepción ... intentar algo como esto en su lugar ...

if(ds.Tables.Count > 0 && ds.Tables[0].Rows.Count >0) 
{ 
    table = ds.Tables[0]; 
} 
else 
{ 
    table = null; 
} 
+0

Muchas gracias ........ –

Cuestiones relacionadas