Если единственное различие между всеми разновидностями метода - это код SQL, то создайте для каждого открытый метод, и пусть все они вызовут закрытый метод с общим кодом, передав правильную строку SQL.
private DataTable PerformQuery(string sql, System.DateTime startdate, System.DateTime enddate)
{
var tblvisits = 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
{
tblvisits = ds.Tables[0];
}
catch
{
tblvisits = null;
}
}
return tblvisits;
}
А затем для публичных:
public DataTable Sales(System.DateTime startdate, System.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 PerformQuery(sql, startdate, enddate);
}
public DataTable GetVisits(System.DateTime startdate , System.DateTime enddate)
{
const string sql = @"SELECT CONCAT(UPPER(SUBSTRING(visit_Status, 1, 1)), SUBSTRING(visit_Status FROM 2)) as Status, COUNT('x') AS Visits
FROM visits
WHERE visit_Date BETWEEN @startdate AND @enddate
GROUP BY visit_Status";
return PerformQuery(sql, startdate, enddate);
}
И повторите для каждого из остальных.Предполагается, что, как вы указали, все параметры одинаковы, и единственное отличие состоит в том, что запускается SQL.