powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / время выполнения хранимой процедуры на клиенте
8 сообщений из 8, страница 1 из 1
время выполнения хранимой процедуры на клиенте
    #37639898
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
приложение читает данные с ХП (рекордсет) и заполяет по ним контрол,
данные за мелкий период с задержкой правда, но читает заполняет, если беру период в год или пару месяцев -
выдает ошибку "Истекло время ожидания. Истекло время ожидания или сервер не отвечает", на самом сервере ХП отрабатывает моментом, да и набор данных возвращаемый ХП совсем мелкий при периоде в год ~250 строк возвращает, в тоже время равнозначный по принципу работы код только с другой ХП без проблем за тот же год заполняет ~20 тыс строк.
Код

Код: 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.
void RowsAdd_0_0_not_estimated()
        {
            try
            {
                using (SqlConnection cn = new SqlConnection(myClassConnect.create_bldr().ConnectionString))
                {
                    using (SqlCommand cmd = cn.CreateCommand())
                    {
                        cmd.CommandText = "transport.get_waybill_0_0_not_estimated";
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.CommandTimeout = 100;
                        switch (_val.EnumReporting)
                        {
                            case myEnumReporting.YearMonth:
                                cmd.Parameters.AddWithValue("data_begin", new DateTime(_val.Year, _val.Month, 1).Date);
                                cmd.Parameters.AddWithValue("data_end", new DateTime(_val.Year, _val.Month, 1).AddMonths(1).AddDays(-1).Date);
                                break;
                            case myEnumReporting.Period:
                                cmd.Parameters.AddWithValue("data_begin", _val.DateBegin.Date);
                                cmd.Parameters.AddWithValue("data_end", _val.DateEnd.Date);
                                break;
                        }
                        cmd.Parameters.AddWithValue("kod_fil", _val.KodFil);
                        if (_val.IdOrg == 1) { cmd.Parameters.AddWithValue("id_org", DBNull.Value); }
                        else { cmd.Parameters.AddWithValue("id_org", _val.IdOrg); }
                        cmd.Parameters.AddWithValue("id_org_fil", (int)myDataTable.Filial().Rows.Find(_val.KodFil)[4]);
                        //
                        //MessageBox.Show(cmd.Parameters["data_begin"].Value.ToString() + "-" + cmd.Parameters["data_end"].Value.ToString() + "-" + cmd.Parameters["kod_fil"].Value.ToString() + "-" + DBNull.Equals(cmd.Parameters["id_org"].Value, DBNull.Value).ToString() + "-" + cmd.Parameters["id_org_fil"].Value.ToString());
                        //
                        //MessageBox.Show(_val.DateBegin.ToShortDateString() + "-" + _val.DateEnd.ToShortDateString() + "-" + _val.KodFil.ToString() + "-" + _val.IdOrg.ToString() + "-" + ((int)myDataTable.Filial().Rows.Find(_val.KodFil)[4]).ToString());
                        cn.Open();
                        //
                        MessageBox.Show("cn.Open" + "-" + cmd.CommandTimeout.ToString());
                        using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) //тут задержка
                        {
                            //
                            MessageBox.Show("cmd.ExecuteReader");
                            dxtl.M.BeginUpdate();
                            //
                            MessageBox.Show("BeginUpdate");
                            ColumnsAdd_0_0_not_estimated();
                            //
                            MessageBox.Show("ColumnsAdd_0_0_not_estimated");
                            //
                            if (rdr.HasRows == true)
                            {                                
                                dxTreeNode dxnode = null, dxnodeOrg = null;
                                int _idOrg = 0;
                                MessageBox.Show("HasRows");
                                while (rdr.Read())
                                {
                                    if (_idOrg != rdr.GetInt32(1))
                                    {
                                        _idOrg = rdr.GetInt32(1);
                                        dxnodeOrg = dxtl.M.Add();
                                        dxnodeOrg.set_Strings(0, rdr.GetString(2));   // owner_car
                                    }
                                    dxnode = dxnodeOrg.AddChild();                                                                        
                                    dxnode.set_Strings(1, string.Format("{0:N0}", rdr.GetInt16(3)));   // waibill_pack                                                
                                    dxnode.set_Values(2, rdr.GetDecimal(4));   // номер
                                    dxnode.set_Strings(3, rdr.GetString(5));   // data                                                                               
                                    dxnode.set_Strings(4, rdr.GetString(6));   // гос_номер
                                    dxnode.set_Strings(5, rdr.GetString(7));   // trailer
                                    dxnode.set_Strings(6, rdr.GetString(8));   // vsbCargo                                        
                                    if (!rdr.IsDBNull(9)) dxnode.set_Strings(7, rdr.GetString(9));     // ob
                                    if (!rdr.IsDBNull(10)) dxnode.set_Strings(8, rdr.GetString(10));    // name_cn
                                    if (!rdr.IsDBNull(11)) dxnode.set_Strings(9, rdr.GetString(11));   // prorab                                      
                                    if (!rdr.IsDBNull(12)) dxnode.set_Values(10, rdr.GetDecimal(12));   // tn                                       
                                    if (!rdr.IsDBNull(13)) dxnode.set_Values(11, rdr.GetInt16(13));     // km
                                    if (!rdr.IsDBNull(14)) dxnode.set_Values(12, rdr.GetDecimal(14));   // tkm
                                }
                            }
                            else
                            {
                                dxtl.M.Add();
                            }
                            dxtl.M.EndUpdate();
                        }
                    }
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, myClassConnect.userIO, MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }



стопориться на открытии рекордсета - using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
не понимаю в чем причина, посоветуйте что плз
приложение на net 3.5 sp1, WPF
select @@VERSIONMicrosoft SQL Server 2008 R2 (SP1) - 10.50.2796.0 (Intel X86)
Dec 9 2011 11:32:47
Copyright (c) Microsoft Corporation
Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

статистика выполнения ХП на сервере


...
Рейтинг: 0 / 0
время выполнения хранимой процедуры на клиенте
    #37639908
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
время выполнения хранимой процедуры на клиенте
    #37639913
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то картинка не идет )
...
Рейтинг: 0 / 0
время выполнения хранимой процедуры на клиенте
    #37640013
VAlexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему перед именем параметров не указываете символ "@"?
...
Рейтинг: 0 / 0
время выполнения хранимой процедуры на клиенте
    #37640037
VAlexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте в профайлере посмотреть, какой запрос клиент отправляет серверу.
Возможно, отличия в клиентских опциях (например, язык)
...
Рейтинг: 0 / 0
время выполнения хранимой процедуры на клиенте
    #37641505
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@ не нужна, запроса нет, отличий тоже, выполняется ХП
при cmd.CommandTimeout = 0; отрабатывает, но пару минут, чем модет быть вызвана такая задержка 'открытия' рекордсета?
или это из области хз? )
...
Рейтинг: 0 / 0
время выполнения хранимой процедуры на клиенте
    #37647223
Wiking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может вы Connection не закрываете в предыдущем вызове, и он ждет пока закроется
...
Рейтинг: 0 / 0
время выполнения хранимой процедуры на клиенте
    #37718989
ka3yc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
koJIo6ok, У меня возникали подобные проблемы вообще на ровном месте. Решались перекомпиляцией хранимки. Видимо, перестроение execution plan помогало :)
Если это оно, то можно поставить опцию что-то типа "WITH_RECOMPILE"
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / время выполнения хранимой процедуры на клиенте
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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