Генерация вызова сохранённой процедуры
От: st777  
Дата: 17.07.07 13:39
Оценка:
Здравствуйте.
Недавно начал знакомиться с bltoolkit.
Возник вопрос: имеется хранимая процедура обновляющая данные таблицы бд (update).
Генерация вызова сохранённой процедуры следующая (делал по аналогии с Insert в How to):

..........................
public abstract class MovieCategoryAccessor:DataAccessor<MovieCategory>
{
private const string spUpdateMC = "USP_MOVIECATEG_UPDATE";

[SprocName(spUpdateMC)]
public abstract void UpdateMC(MovieCategory mCateg);
}
.........................................
сам вызов:
MovieCategory mCateg = new MovieCategory();

mCateg.Id = _categMovieID;
mCateg.Name = txtcategName.Text;
mCateg.Description = txtcategDesc.Text;

DAL.MCateg.UpdateMC(mCateg);
.........................................................
DAL — стат класс со стат свойствам MCateg:

MovieCategoryAccessor _mcAccessor;
..........
_mcAccessor = (MovieCategoryAccessor)DataAccessor.CreateInstance(typeof(MovieCategoryAccessor));
return _mcAccessor;
.........................

Сам вопрос — во время выполнения возникает исключение: хранимая процедура требует входные параметры (id,name, desc), и не находит их. Подскажите выход (может просто передавать сами параметры, а не объект (mCateg))?
А сама процедура?
От: Блудов Павел Россия  
Дата: 18.07.07 03:30
Оценка:
Здравствуйте, st777, Вы писали:

S>Сам вопрос — во время выполнения возникает исключение: хранимая процедура требует входные параметры (id,name, desc), и не находит их. Подскажите выход (может просто передавать сами параметры, а не объект (mCateg))?


Покажите код хранимой процедуры. Тело не нужно, нужен только заголовок. Ещё будет крайне полезно, если укажете, какая БД используется.
... << RSDN@Home 1.2.0 alpha rev. 692>>
Re: А сама процедура?
От: st777  
Дата: 19.07.07 09:40
Оценка:
Здравствуйте, Блудов Павел, Вы писали:

БП>Покажите код хранимой процедуры. Тело не нужно, нужен только заголовок. Ещё будет крайне полезно, если укажете, какая БД используется.


Процедура:
..........................................
PROCEDURE USP_MOVIECATEG_UPDATE
(
@categ_id int,
@categ_name varchar(30),
@categ_desc varchar(50)
)
.........................................
БД: MS SQL Server 2005 (полная версия, не Mobile Edition)

Я обошелся простой передачей параметров (id, name и desc), но буду благодарен если подскажете др вариант.
Заранее спасибо.
Re[2]: А сама процедура?
От: IT Россия linq2db.com
Дата: 19.07.07 12:59
Оценка:
Здравствуйте, st777, Вы писали:

S>Я обошелся простой передачей параметров (id, name и desc), но буду благодарен если подскажете др вариант.


Имена параметров и полей класса должны либо совпадать, либо между ними должен быть прописан чёткий маппинг.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Это можно.
От: Блудов Павел Россия  
Дата: 20.07.07 00:58
Оценка:
Здравствуйте, st777, Вы писали:
mCateg.Id = _categMovieID;
mCateg.Name = txtcategName.Text;
mCateg.Description = txtcategDesc.Text;

S>Процедура:
S>       ..........................................
S>        PROCEDURE USP_MOVIECATEG_UPDATE     
S>    (
S>        @categ_id int,
S>        @categ_name varchar(30),
S>        @categ_desc varchar(50)
S>    )    
S>       .........................................


К сожалению, модуль эвристического вывода параметров пока ещё не реализован, поэтому нужно как-то явно указать что поле Name должно стать параметром categ_name. Это можно задать, перекрыв метод GetSpParameterName у DataAccessor:
public abstract class MovieCategoryAccessor : DataAccessor<MovieCategory>
{
    private const string spUpdateMC = "USP_MOVIECATEG_UPDATE";

    [SprocName(spUpdateMC)] 
    public abstract void UpdateMC(MovieCategory mCateg);

    [NoInterception]
    protected override string GetSpParameterName(DbManager db, string paramName)
    {
        return (string)db.DataProvider.Convert("categ_" + paramName, ConvertType.NameToParameter);
    }
}


Если в Вашей компании строго придерживаются каких-либо правил именования параметров хранимых процедур, BLToolkit можно подстроить под эти правила.
... << RSDN@Home 1.2.0 alpha rev. 692>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.