从数据库获取数据的问题

本文关键字:问题 数据 获取 数据库 | 更新日期: 2023-09-27 18:08:21

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

如果表中没有数据,它将总是转到这句话

我正在使用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);
     }

和下面的代码是用于返回sqlexcetion…函数…

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

如何减少这个.....

有谁能帮帮我....

从数据库获取数据的问题

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

对于这个,我认为你可以利用ds.table[0].rows.count属性返回0,如果在datatable中没有行。

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

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

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

我不太确定你在问什么…我假设您希望它跳过表= ds。表[0]行是否有数据?

如果是这种情况,try/catch将不起作用,因为它不会抛出异常…试试这样做…

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