Страница 1 из 2

MySql TimeOut

Добавлено: 25 окт 2010, 10:04
Сергей Воликов
Добрый день!
Нужна помощь.
При выполнении запроса, который выполняется более 30 секунд получаю ошибку.
И на сайте и в конструкторе.
Указание в строке подключения параметра, например - 180 сек, "Default Command Timeout=180" результата не дает.
Время все равно остается 30 секунт по дефолту.
Как увеличить время выполнения запроса?

Проанализировав код увидел строчку:
MyBase.New("MySql", "Report", "Report", "", true, false, 30)
Возможно причина в этом?

Заранее спасибо!

MySql TimeOut

Добавлено: 26 окт 2010, 06:07
Aleksey
Здравствуйте,

Пожалуйста, уточните какой адаптер вы используете. И используете ли вы параметры в запросе.

Спасибо.

MySql TimeOut

Добавлено: 26 окт 2010, 06:40
Сергей Воликов
Использую адаптер MySQLDatabase от 26.08.10.
Параметры использую.
Теперь саме интересное.
По непонятным для меня причинам сегодня все заработало. :ops:
Извините за беспокойство.

MySql TimeOut

Добавлено: 26 окт 2010, 08:08
Andrew
Отлично. Будем рады помочь Вам в дальнейшем.

Спасибо.

MySql TimeOut

Добавлено: 27 окт 2010, 08:38
Сергей Воликов
К сожалению проблема не устранена.
Я не учел, что у меня два запроса, которые выполняются, примерно, по 20-40 секунд. И когда я увидел, что что время формирования отчета 50 секунд подума, что проблема устранена.
Если запросы выполняются до 30 секунд проблем нет. Если хоть один больше - ошибка.
Прошу помощи в решении проблемы.

MySql TimeOut

Добавлено: 27 окт 2010, 10:17
Aleksey
Здравствуйте,

Мы сделали некоторые улучшения в адаптере для MySql.
Проверьте пожалуйста адаптер в прикрепленном файле и сообщите нам о результатах.

Спасибо.

MySql TimeOut

Добавлено: 27 окт 2010, 10:50
Сергей Воликов
Проверил. Без изменений. :(
Ошибка:

Код: Выделить всё

----------------------------
[Customer Explanation]
----------------------------
[General Info]
Application: Stimulsoft Reports.Net
Framework:   v2.0.50727
Version:     Version: 2010.2.735 from 28 June 2010
MachineName: ***********
OSVersion:   Microsoft Windows NT 5.1.2600 Service Pack 3
UserName:    ********

----------------------------
[Exception Info]
Message:     Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

Source:      MySql.Data

StackTrace:
   в MySql.Data.MySqlClient.MySqlConnection.HandleTimeoutOrThreadAbort(Exception ex)
   в MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
   в MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   в System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
   в System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   в System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
.........
----------------------------
[Assemblies]
mscorlib, Version = 2.0.0.0
Stimulsoft.Base, Version = 2010.2.735.0
Stimulsoft.Report, Version = 2010.2.735.0
Stimulsoft.Report.Design, Version = 2010.2.735.0
System.Windows.Forms, Version = 2.0.0.0
Код программы:

Код: Выделить всё

this.Dictionary.Databases.Add(new Stimulsoft.Report.Dictionary.StiMySqlDatabase("MySqlDB", "MySqlDB", "Data Source=ServerName;User Id=UserName;Password=;Default Command Timeout=90", false));
...
        public void GetИсточникДанных1_SqlCommand(object sender, System.EventArgs e)
        {
            this.ИсточникДанных1.SqlCommand = "SELECT IF(BENCHMARK(1000000000,SIN(RAND(NOW())))=0,NOW(),NOW()) as TimeRun";
        }
        #region DataSource ИсточникДанных1
        public class ИсточникДанных1DataSource : Stimulsoft.Report.Dictionary.StiMySqlSource
        {            
            public ИсточникДанных1DataSource() :  base("MySqlDB", "ИсточникДанных1", "ИсточникДанных1", "", true, false, 30)
            {  }
              public virtual DateTime TimeRun
            {
                get
                {
                    return ((DateTime)(StiReport.ChangeType(this["TimeRun"], typeof(DateTime), true)));
                }
            }
        }
        #endregion DataSource ИсточникДанных1
На сколько я понимаю, вы жестко устанавливаете время в строке равное 30 сек.:

Код: Выделить всё

 public ИсточникДанных1DataSource() :  base("MySqlDB", "ИсточникДанных1", "ИсточникДанных1", "", true, false, 30)
Поменял в файле StiMySqlSource.cs строку

Код: Выделить всё

base(nameInSource, name, alias, sqlCommand, connectOnStart, reconnectOnEachRow, commandTimeout)
на

Код: Выделить всё

base(nameInSource, name, alias, sqlCommand, connectOnStart, reconnectOnEachRow, 90)
Заработало.
Но это временное решение. Жду "правильного" решения.

MySql TimeOut

Добавлено: 27 окт 2010, 11:13
Aleksey
Здравствуйте,

Установите для данного источника данных(ИсточникДанных1) Command Timeout значение большее 30.

Спасибо.

MySql TimeOut

Добавлено: 27 окт 2010, 11:17
Aleksey
Здравствуйте,
Sergey писал(а): На сколько я понимаю, вы жестко устанавливаете время в строке равное 30 сек.:

Код: Выделить всё

 public ИсточникДанных1DataSource() :  base("MySqlDB", "ИсточникДанных1", "ИсточникДанных1", "", true, false, 30)
Данное значение устанавливается по умолчанию для DataSource. Вы его можете изменить в свойствах Источника данных.

Спасибо.

MySql TimeOut

Добавлено: 27 окт 2010, 12:10
Сергей Воликов
Спасибо!
Оказывается все так просто решается. :)