2011-12-24 2 views
0

В основном это механизм латаниес использованием нескольких операций в одном соединении

Вот что я делаю:

  1. Открыть соединение SQL.
  2. Начните сделку.
  3. Обновить запись в базе данных для версии программного обеспечения.
  4. Выполнение нескольких запросов в одной базе данных с использованием того же соединения.
  5. Скачайте файл с 15 до 20 МБ.
  6. Выполнение запроса выбора с использованием того же соединения.
  7. Заключить сделку.
  8. Завершите сделку.

Эта последовательность вызывает проблему с таймаутом SQL Connection, так как требуется время для загрузки файла. Проблема в том, что я могу совершить транзакцию только после загрузки файла, а не до этого.

Написание кода в C#. База данных используется SQLCE Вот некоторая часть кода:

SqlCeConnection conn = new SqlCeConnection("ConnectionString"); 

conn.Open(); 
SqlCeTransaction ts = conn.BeginTransaction(); 

//A method call executes all the methods that with parameters 
(string sqlQuery, ref SqlCeConnection conn, SqlCeTransaction ts) 
{ 
SqlCeCommand cmd = new SqlCeCommand(); 
cmd.Connection = conn; 
cmd.Transaction = ts; 
cmd.CommandText = sqlQuery; 
cmd.ExecuteNonQuery(); 
} 

//A method call downloads the file of 15 to 20 MB 

//A method executes a select query that returns the version of the software by using same SQL connection. 

//The above query gives the error of SQl connection timeout 
ts.Commit(); 
conn.Close(); 

Может ли один помочь мне решить проблему

+1

Почему вы хотите загрузить большой файл во время транзакции. Мне это кажется просто: делать это неправильно ... Все, что вы можете сделать, я удаляю (вместо того, чтобы пытаться работать * несмотря на то, что), было бы хорошо. –

+0

Как я уже упоминал, это механизм исправления, изначально я делаю обновление базы данных, а затем применяю двоичное обновление. И если двоичное обновление становится доступным, то только я совершаю изменения базы данных. – Bhushan

+0

. Я не вижу релевантности - загрузка большого файла (ish) во время транзакции все еще будет проблемой. Загрузите файл ** сначала **, * вне * транзакции. –

ответ

0

Это то, что я сделал.

Я передал тот же объект соединения и транзакции методу, который загружал файл. В этом методе я выполнил простой запрос select в цикле, в который загружался файл. Это помогло сохранить активную связь и транзакцию. Здесь, даже если скорость вашего интернет-соединения медленная, это не влияет, поскольку в каждом цикле ваш запрос SQl активируется и поддерживает соединение.

0

Set прикажете таймаут вручную.

cmd.CommandTimeout = 180; 

Этот пример устанавливает тайм-аут до 180 секунд (3 минуты)

+0

Это не поможет, так как время загрузки файла может быть изменено в зависимости от скорости интернета и размера файла. – Bhushan

+0

Даже после установки таймаута этой команды это не работает. – Bhushan

Смежные вопросы