从数据库获取数据的问题

Eni*_*ate 6 .net c# sql dataset winforms

我试图通过使用下面的代码从数据库中获取数据.....

如果表中没有数据,它将始终转到此语句

我使用mysql.net连接器获取数据,我正在使用c#进行winforms应用程序

     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);
     }
Run Code Online (Sandbox Code Playgroud)

以下代码用于返回sqlexceution ...函数..

 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;
     }
Run Code Online (Sandbox Code Playgroud)

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

table = ds.Tables [0];

我怎么能减少这个......

任何人都会对此有所帮助....

Pra*_*ana 4

在您的情况下,如果您认为如果没有可用行,则 catch 块将被执行,那么您就错了,因为即使执行选择查询后没有数据,无一例外,它也会创建包含列但没有行的数据表。

为此,我认为您可以使用ds.table[0].rows.count如果数据表中没有行则返回 0 的属性。

if ( ds.Tables[0].Rows.Count > 0 )
     table = ds.Tables[0];
else
     table=null;
Run Code Online (Sandbox Code Playgroud)