Здравствуйте.
Недавно начал знакомиться с 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))?
Здравствуйте, st777, Вы писали:
S>Сам вопрос — во время выполнения возникает исключение: хранимая процедура требует входные параметры (id,name, desc), и не находит их. Подскажите выход (может просто передавать сами параметры, а не объект (mCateg))?
Покажите код хранимой процедуры. Тело не нужно, нужен только заголовок. Ещё будет крайне полезно, если укажете, какая БД используется.
... << RSDN@Home 1.2.0 alpha rev. 692>>
Здравствуйте, st777, Вы писали:
S>Я обошелся простой передачей параметров (id, name и desc), но буду благодарен если подскажете др вариант.
Имена параметров и полей класса должны либо совпадать, либо между ними должен быть прописан чёткий маппинг.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Здравствуйте, 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>>