Здравствуйте, IT, Вы писали:
IT>Если же вынести задание команд в отдельные методы, то дальше комбинируй сам как хочешь.
IT>
IT>using (DbManager db = new DbManager())
IT>{
IT> return db
IT> .InsertCommand("INSERT INTO...", db.CreateParameters(entity))
IT> .UpdateCommand(CommandType.StoredProcedure, "UpdateItem")
IT> .DeleteSp("DeleteItem", db.Parameter("@ID"))
IT> .UpdateDataSet();
IT>}
IT>
IT>Придётся конечно запоминать сформированные команды в DbManager, но это уже мелочи.
Еще мысля меня посетила... При таком подходе фактически выставляются команды для инстанса. Если я хочу выполнить два подряд апдейта, то после первого у меня останутся команды, которые для второго например мне нафиг не нужны, т.е. либо надо тогда еще давать ф-и типа RemoveInsertCommand, но тогда в любом случае перед вызовом ф-и апдейта надо будет указывать все 3 команды, чтобы быть уверенным, что будут использоваться именно те команды, которые нужны, либо как вариант можно очищать все команды после выполнения каждой ф-и апдейта, но это тоже как-то не так, бо а что если я все-таки хочу реиспользовать какую-то команду? В общем, вот...
как выполнить сторед процедуру с 2-мя входными и одним выход
Здравствуйте, oRover, Вы писали:
R>как выполнить сторед процедуру с 2-мя входными и одним выходным параметром? R>пробовал ExecuteSpScalar и ExecuteSpList — что-то не получается...
Вот юнит тест output параметра:
[Test]
public void OutputParameter()
{
using (DbManager db = new DbManager(ConfigurationString))
{
db.ExecuteNonQuery(@"
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Test]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
begin
drop procedure [dbo].[Test]
end");
db.ExecuteNonQuery(@"
CREATE PROCEDURE dbo.Test
@p1 int,
@p2 int,
@po int output
AS
SET @po = @p1 * @p2");
db.ExecuteNonQuery(@"
GRANT EXEC ON dbo.Test TO PUBLIC");
db.ExecuteSpNonQuery(
"Test",
db.Parameter("@p1", 2),
db.Parameter("@p2", 2),
db.OutputParameter("@po", 0));
object o = db.Parameter("@po").Value;
Console.WriteLine(o);
Assert.AreEqual(4, o);
}
}
Но, по моему скромному ИМХУ использование output рараметров не самый лучший способ возвращать данные из сохранённой процедуры. Ту же SP можно написать так:
Hello, IT!
DI>> А как насчет добавить параметр таймаут для ExecuteNonQuery, DI>> ExecuteScalar и т.д.?
I> По идее это задаётся в Command.CommandTimeout.
Ну да, но когда мы передаем текст и получаем только результат — доступ к Command мы не имеем...
Здравствуйте, der Igel, Вы писали:
I>> По идее это задаётся в Command.CommandTimeout.
DI>Ну да, но когда мы передаем текст и получаем только результат — доступ к Command мы не имеем...
Не имеем, надо сделать чтобы имели.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, gloomy rocker, Вы писали: GR>Понятно... GR>А какова общая концепция, и что эта штука будет уметь?
И много-много денюшков детишкам принесла...
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Igor Trofimov, Вы писали:
iT>А как бы мне заставить dbManager работать с адаптерами, указвая им мои собственные DataTableMappings ?
iT>Что-то вроде ExecuteDataTable(sqlText, dataTable, dataTableMapping, params parameters) хочется.
А что такое dataTableMapping? IDictionary?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Игорь Ткачёв, Вы писали:
ИТ>Аннотация: ИТ>В статье подробно рассматривается состав и способы применения пространства имён Rsdn.Framework.Data, представляющего собой высокоуровневую обёртку над ADO.NET.
в рамках б-бы за повышение документированности неплохо бы статейку актуализировать, ибо как стартап к системе она очень ценная, юнит тесты, конечно, источник знаний, но явно не дают быстрого и простого понимания что к чему
да и ссылки неактуальные, ниткой выше люди жалуются... це бардак =)
Здравствуйте, ili, Вы писали:
ili>в рамках б-бы за повышение документированности неплохо бы статейку актуализировать, ибо как стартап к системе она очень ценная, юнит тесты, конечно, источник знаний, но явно не дают быстрого и простого понимания что к чему
помятуя о занятости основных игроков, решил помочь с этим делом здесь "рыба" (писата в соотв-ии с требованиями к оформлению статей).
основана на изначалной статье, на сей момент дописата вплоть до методов Execute, что дальше, там накидан небольшой план.
если це устраивает — готов продолжить, если це не устраивает — хозяин барин, если це устраивает частично — давайте ЦУ.
Здравствуйте, ili, Вы писали:
ili>основана на изначалной статье, на сей момент дописата вплоть до методов Execute, что дальше, там накидан небольшой план. ili>если це устраивает — готов продолжить, если це не устраивает — хозяин барин, если це устраивает частично — давайте ЦУ.
там в доке, в самом конце там где про ExecuteDictionary есть одна маленькая непонятка... можно мне словами разъяснить что и как там получается на счет "ID" и "@PersonId" выступающих как ключи...
честно говоря, тут некоторый бардак (ну у мя в голове — точно )...
т.к. в ряде случаев я точно натыкался на эксепшн который говорил, что необходимо использовать имя для отображения (вроде это было в ExecuteResultSets) а тут ни ясно как так....
Если не указано '@', то значение берётся из поля уже смапленного объекта, если '@' присутсвует, то из исходной запсиси.
Зачем это надо. Первый случай может пригодиться, если словарь строится по полю, которое явно не отображается на исходную запись. Например, какое-нибудь составное поле в объекте. Второй случай может понадобиться, когда нужно построить словарь по полю, которое есть в исходном рекордсете, но не отображается на объект. Если ключевое поле один в один отображается на объект, то разницы нет.
... << RSDN@Home 1.2.0 alpha rev. 771>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, ili, Вы писали:
IT>Примерно из той же серии: http://www.bltoolkit.net/Doc/DataAccess/ExecuteDictionary.htm
IT>Если не указано '@', то значение берётся из поля уже смапленного объекта, если '@' присутсвует, то из исходной запсиси. IT>Зачем это надо. Первый случай может пригодиться, если словарь строится по полю, которое явно не отображается на исходную запись. Например, какое-нибудь составное поле в объекте. Второй случай может понадобиться, когда нужно построить словарь по полю, которое есть в исходном рекордсете, но не отображается на объект. Если ключевое поле один в один отображается на объект, то разницы нет.
а мы говорим именно о "собачке" или это зависит от DataProvider-а?