Кто-нибудь имел успех с Subsonic3, linq, MySQL и хранимыми процедурами?

Я пытался запустить хранимые процедуры 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;

}


person Community    schedule 28.09.2009    source источник
comment
Почему у вас пустой блок catch? Это почти никогда не бывает хорошо.   -  person Michael Maddox    schedule 28.09.2009
comment
Я просто ленился ... я еще не закончил этот класс ... Обычно я добавляю обработку исключений позже.   -  person    schedule 26.10.2009


Ответы (2)


У меня никогда не было хранимых процедур для работы с mysql и subsonic, но я тоже так сильно не пробовал. мои аргументы в пользу того, что у вас есть что-то лучше, чем встроенный sql.

Я думаю, что говорю о массе, что хранимые процедуры использовались, чтобы обойти наличие кода базы данных (множество sql) внутри приложения, пунктирного здесь n там, чтобы программисты использовали хранимые процедуры для разделения 2 проблем и облегчения обновления / изменения /ремонт.

теперь, если вы используете дозвуковой или любой другой тип DAL и сущностей, вам не нужно писать sql-операторы как таковые, вы просто пишете код .... subsonic, linq и т. д. знаете, что с этим делать, и переводите его для вас.

так что вам действительно не нужны хранимые процедуры, если у вашей базы данных есть проблема, вы просто снова запускаете свои файлы TT.

остальное - это код, ваша программа. так что, возможно, это не тот ответ, который вам нужен, но уволите хранимые процедуры и воспользуйтесь тем, насколько весело использовать что-то вроде дозвуковой, и хорошо забудьте все о своей базе данных и просто подумайте о коде.

person davethecoder    schedule 30.09.2009
comment
Хорошая точка зрения. Я полностью согласен ... Я создаю уровень данных на ком-то elses db, и у него было написано несколько здоровенных хранимых процедур, которые у меня просто не было времени воспроизвести в объектном коде. Так что запуск его существующих хранимых процедур был для меня самым быстрым вариантом. - person ; 26.10.2009

У меня возникла проблема с выполнением служебного процессора без параметров и попыткой считывания вывода. Кажется, вам нужно выполнить эту работу.;

SubSonic.StoredProcedure sp = SPs.UspNoParamProc();
//Stored Procedure command Is Null... ensure command is created
string dummy = sp.Command.CommandSql;

rptList.DataSource = sp.GetReader();
rptList.DataBind(); 

Не уверен, продолжает ли эта проблема существовать в версии 3.0 или нет. Может попробовать.

person CmdrTallen    schedule 13.10.2009