powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate, FireBird, хранимая процедура
5 сообщений из 5, страница 1 из 1
NHibernate, FireBird, хранимая процедура
    #38702674
ProESM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую!

Недавно познакомился с такими вещами, как Visual Studio, ASP.NET, NHibernate.

Сейчас вроде все настроил, получаю данные из БД (FireBird) через NHibernate. Отображаются объекты.
Далее интереснее. Изменение тех или иных записей в таблицах в основном происходит через хранимые процедуры БД, так как помимо самих изменений выполняет много дополнительных операций (запись в логи, формирование вспомогательных данных для отчетов и т.п.). Вот и решил вызвать хранимую процедуру посредством NHibernate. Делаю так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
public void UpdateWare(S_Ware ware)
        {
            var httpCookie = HttpContext.Current.Request.Cookies["mr3UserId"];
            if (httpCookie != null)
            {
                var mr3UserId = int.Parse(httpCookie.Value);
                
                using (var transaction = _session.BeginTransaction())
                {
                    #region update_s_ware

                    _session.CreateSQLQuery(
                        "execute procedure spiu_ware (:puser, :precstate, :pid, :pstructure, :pmodel, :pcur, :pcost, :pflags, :pnotes, :pstore, :pnststore, :pweight, :pkind, " +
                        ":porig_name, :porig_art, :pdrawing_num, :pshape_info, :psupply_code, :psupply_delay, :pprice_delay, :pmax_qty, :ppallet_qty, :ppx, :ppy, :pyassp," +
                        ":ppreyassp, :pnum_packs, :pdx, :pdy, :pdz, :praspil_type, :pware_type, :pcustoms_note, :puse_flag, :pdoc19kind, :pc_manager, :pc_ware_group, :pc_ware_pack," +
                        ":pw_qty, :pv_qty, :psome_weight, :psome_volume, :psome_dx, :psome_dy, :psome_dz, :pcustoms_cost, :pspec_ware_descr, :pspec_model_descr, :prelevance_date," +
                        ":pcatalogs_flag, :pinput_date, :psuspension_date, :presumption_date, :psuplier_id, :ppack_multiple_sale, :pkoef_nz, :pkratnost, :prazmer_by_param, :pfoto_name," +
                        ":pspec_flags, :pspec_cost_with_brak, :pnds, :pcost_without_nds, :pprice_spec, :pprice_cost, :pc_commersant, :pc_acc)")                        
                        .SetParameter("puser", mr3UserId, NHibernateUtil.Int32)
                        .SetParameter("precstate", 1 /* 0 – если надо добавить запись, 1 – если отредактировать */,
                            NHibernateUtil.Int32)
                        .SetParameter("pid", ware.C_Ware, NHibernateUtil.Int32)
                        .SetParameter("pstructure", ware.C_Structure, NHibernateUtil.Int32)
                        .SetParameter("pmodel", ware.C_Model, NHibernateUtil.Int32)
                        .SetParameter("pcur", ware.C_Cur, NHibernateUtil.Int32)
                        .SetParameter("pcost", ware.Cost, NHibernateUtil.Decimal)
                        .SetParameter("pflags", ware.Flags, NHibernateUtil.Int32)
                        .SetParameter("pnotes", ware.Notes, NHibernateUtil.String)
                        .SetParameter("pstore", ware.C_Store, NHibernateUtil.Int32)
                        .SetParameter("pnststore", ware.C_Nst_store, NHibernateUtil.Int32)
                        .SetParameter("pweight", ware.Weight, NHibernateUtil.Decimal)
                        .SetParameter("pkind", ware.Kind, NHibernateUtil.Int32)
                        .SetParameter("porig_name", ware.Orig_Name, NHibernateUtil.String)
                        .SetParameter("porig_art", ware.Orig_Art, NHibernateUtil.String)
                        .SetParameter("pdrawing_num", ware.Drawing_Num, NHibernateUtil.String)
                        .SetParameter("pshape_info", ware.Shape_Info, NHibernateUtil.String)
                        .SetParameter("psupply_code", ware.Supply_Code, NHibernateUtil.String)
                        .SetParameter("psupply_delay", ware.Supply_Delay, NHibernateUtil.Int32)
                        .SetParameter("pprice_delay", ware.Price_Delay, NHibernateUtil.Int32)
                        .SetParameter("pmax_qty", ware.Max_QTY, NHibernateUtil.Int32)
                        .SetParameter("ppallet_qty", ware.Pallet_QTY, NHibernateUtil.Int32)
                        .SetParameter("ppx", ware.PX, NHibernateUtil.Decimal)
                        .SetParameter("ppy", ware.PY, NHibernateUtil.Decimal)
                        .SetParameter("pyassp", ware.YASSP, NHibernateUtil.Date)
                        .SetParameter("ppreyassp", ware.PreYASSP, NHibernateUtil.Date)
                        .SetParameter("pnum_packs", ware.Num_Packs, NHibernateUtil.Int32)
                        .SetParameter("pdx", ware.DX, NHibernateUtil.Decimal)
                        .SetParameter("pdy", ware.DY, NHibernateUtil.Decimal)
                        .SetParameter("pdz", ware.DZ, NHibernateUtil.Decimal)
                        .SetParameter("praspil_type", ware.C_Raspil_Type, NHibernateUtil.Int32)
                        .SetParameter("pware_type", ware.C_Ware_Type, NHibernateUtil.Int32)
                        .SetParameter("pcustoms_note", ware.Customs_Note, NHibernateUtil.String)
                        .SetParameter("puse_flag", ware.Use_Flag, NHibernateUtil.Int32)
                        .SetParameter("pdoc19kind", ware.Doc19Kind, NHibernateUtil.Int32)
                        .SetParameter("pc_manager", ware.C_Manager, NHibernateUtil.Int32)
                        .SetParameter("pc_ware_group", ware.C_Ware_Group, NHibernateUtil.Int32)
                        .SetParameter("pc_ware_pack", ware.C_Ware_Pack, NHibernateUtil.Int32)
                        .SetParameter("pw_qty", ware.W_QTY, NHibernateUtil.Int32)
                        .SetParameter("pv_qty", ware.V_QTY, NHibernateUtil.Int32)
                        .SetParameter("psome_weight", ware.Some_Weight, NHibernateUtil.Decimal)
                        .SetParameter("psome_volume", ware.Some_Volume, NHibernateUtil.Decimal)
                        .SetParameter("psome_dx", ware.Some_DX, NHibernateUtil.Decimal)
                        .SetParameter("psome_dy", ware.Some_DY, NHibernateUtil.Decimal)
                        .SetParameter("psome_dz", ware.Some_DZ, NHibernateUtil.Decimal)
                        .SetParameter("pcustoms_cost", ware.Customs_Cost, NHibernateUtil.Decimal)
                        .SetParameter("pspec_ware_descr", ware.Spec_Ware_Descr, NHibernateUtil.Int32)
                        .SetParameter("pspec_model_descr", ware.Spec_Model_Descr, NHibernateUtil.Int32)
                        .SetParameter("prelevance_date", ware.Relevance_Date, NHibernateUtil.Date)
                        .SetParameter("pcatalogs_flag", ware.Catalogs_Flag, NHibernateUtil.Int32)
                        .SetParameter("pinput_date", ware.Input_Date, NHibernateUtil.Date)
                        .SetParameter("psuspension_date", ware.Suspension_Date, NHibernateUtil.Date)
                        .SetParameter("presumption_date", ware.Resumption_Date, NHibernateUtil.Date)
                        .SetParameter("psuplier_id", ware.C_Supplier, NHibernateUtil.Int32)
                        .SetParameter("ppack_multiple_sale", ware.Pack_Multiple_Sale, NHibernateUtil.Int32)
                        .SetParameter("pkoef_nz", ware.Koef_NZ, NHibernateUtil.Decimal)
                        .SetParameter("pkratnost", ware.Kratnost, NHibernateUtil.Decimal)
                        .SetParameter("prazmer_by_param", ware.Razmer_By_Param, NHibernateUtil.Decimal)
                        .SetParameter("pfoto_name", ware.Foto_Name, NHibernateUtil.String)
                        .SetParameter("pspec_flags", ware.Spec_Flags, NHibernateUtil.Int32)
                        .SetParameter("pspec_cost_with_brak", ware.Spec_Cost_With_Brak, NHibernateUtil.Decimal)
                        .SetParameter("pnds", ware.Nds ?? 0, NHibernateUtil.Decimal)
                        .SetParameter("pcost_without_nds", ware.Cost_Without_Nds ?? 0, NHibernateUtil.Decimal)
                        .SetParameter("pprice_spec", ware.C_Price_Spec, NHibernateUtil.Int32)
                        .SetParameter("pprice_cost", ware.Price_Cost, NHibernateUtil.Decimal)
                        .SetParameter("pc_commersant", ware.C_Commersant, NHibernateUtil.Int32)
                        .SetParameter("pc_acc", ware.C_Acc, NHibernateUtil.Int32)
                        ;

                    #endregion

                    transaction.Commit();
                }                
            }            
        }



Все отрабатывает без ошибки, но проверяю изменения, вносимые написанной процедурой UpdateWare - никаких изменений в БД.
Проверил работоспособность хранимой процедуры - ввел все параметры руками через IBExpert - все поменялось как и должно было.

Подскажите, пожалуйста, в чем может быть проблема? Что я не доделал или неправильно сделал?! Заранее спасибо!
...
Рейтинг: 0 / 0
NHibernate, FireBird, хранимая процедура
    #38705597
ProESM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть предположения?
...
Рейтинг: 0 / 0
NHibernate, FireBird, хранимая процедура
    #38705687
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProESM, Вы забыли выполнить запрос. Создали его методом CreateSQLQuery, добавили параметры, а выполнить забыли.
...
Рейтинг: 0 / 0
NHibernate, FireBird, хранимая процедура
    #38706364
ProESM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какой метод заставляет выполниться запрос? "List"? (хотя мне возвращаемое значение не нужно)
...
Рейтинг: 0 / 0
NHibernate, FireBird, хранимая процедура
    #38707478
ProESM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался.
Итак, если я хочу возвратить значение некоторого параметра, допустим "ID", то мне нужно вызвать метод List.
Код: c#
1.
2.
3.
4.
5.
6.
...
.SetParameter("pc_commersant", ware.C_Commersant, NHibernateUtil.Int32)
.SetParameter("pc_acc", ware.C_Acc, NHibernateUtil.Int32)
.List<Int32>();

transaction.Commit();



Если же возвращать ничего не нужно, можно воспользоваться методом ExecuteNonQuery, но при этом предварительно создав экземпляр cmd = new SqlCommand("Ваша хранимка", ваш SqlConnection) и далее вызвав cmd.ExecuteNonQuery().
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate, FireBird, хранимая процедура
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]