我正在尝试使用以下代码从数据库中获取数据.....
如果表中没有数据,它将始终进入 这句话
我使用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];
我怎样才能减少这个......
任何人都会帮忙解决这个问题....
答案 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;
}