Я пытался запустить хранимые процедуры MySQL с шаблонами linq в Subsonic3. Я добавил несколько функций в файл MySQL.ttinclude, который, похоже, сгенерировал ссылочные классы хранимых процедур. Однако, когда я запускаю код и вызываю хранимые процедуры, я всегда получаю результаты NULL:
public DataSet SPTotalCallsByHour(int period)
{
rt.rtDB ee = new rt.rtDB();
StoredProcedure sp = ee.Totals_By_Hour(period.ToString());
sp.Execute();
return (DataSet)sp.Output;
}
У кого-нибудь есть хранимые процедуры MySQL, работающие с Subsonic3? Если да, то не могли бы вы объяснить, как вы заставили их работать?
Вы использовали файлы ttinclude прямо из версии Subsonic 3?
Это две функции, которые я добавил в файл MySQL.ttinclude:
List<SPParam> GetSPParams(string spName){
var result=new List<SPParam>();
MySqlCommand cmd = new MySqlCommand();
using(conn=new MySqlConnection(ConnectionString))
{
conn.Open();
cmd.Connection = conn;
cmd.CommandText = spName;
cmd.CommandType = CommandType.StoredProcedure;
try
{
MySqlCommandBuilder.DeriveParameters(cmd);
}
catch
{
}
if(cmd.Parameters.Count > 0)
{
foreach(MySqlParameter param in cmd.Parameters)
{
SPParam p = new SPParam();
p.SysType = GetSysType(param.MySqlDbType.ToString());
p.DbType = param.DbType.ToString();
p.Name = param.ParameterName;
p.CleanName=CleanUp(p.Name);
result.Add(p);
}
}
conn.Close();
}
return result;
}
List<SP> GetSPs(){
var result=new List<SP>();
string[] spNames = GetSPList();
foreach(string spName in spNames){
var sp=new SP();
sp.Name=spName;
sp.CleanName=CleanUp(sp.Name);
sp.Parameters=GetSPParams(sp.Name);
result.Add(sp);
}
return result;
}