从数据库获取数据的问题

时间:2011-09-13 11:48:33

标签: c# .net sql winforms dataset

我正在尝试使用以下代码从数据库中获取数据.....

如果表中没有数据,它将始终进入 这句话

我使用mysql.net连接器获取数据,我正在做winforms应用程序 使用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);
     }

以下代码用于返回sqlexceution ... function ..

 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;
     }

即使没有数据,流程也会转到此行

  

table = ds.Tables [0];

我怎样才能减少这个......

任何人都会帮忙解决这个问题....

3 个答案:

答案 0 :(得分:4)

在你的情况下,如果你认为如果没有可用的行,那么catch块将会被解除,因为即使没有数据,一旦选择查询被排除而无例外它创建带有列的数据表但是没有行。

对于这个我认为你可以使用ds.table[0].rows.count属性,如果数据表中没有行,则返回0。

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

答案 1 :(得分:3)

它返回一个空表。这是常见的行为。如果你想让表为null,你应该检查行数:

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

答案 2 :(得分:3)

我不确定你在这里问的是什么......如果没有数据,我猜你想让它跳过table = ds.tables [0]行吗?

如果是这样的情况,try / catch不会工作,因为它不会抛出异常......尝试这样的事情......

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