Страница 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
Сергей Воликов
Спасибо!
Оказывается все так просто решается.