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];
我怎么能减少这个......
任何人都会对此有所帮助....
在您的情况下,如果您认为如果没有可用行,则 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)