Обновление таблицы базы данных SQL с помощью веб-службы - PullRequest
1 голос
/ 22 мая 2009

У меня есть проблема, и я смотрел долго и упорно через Интернет для ответа, но не могу найти что-нибудь.

У меня есть небольшое приложение, которое всасывает веб-сервис. Затем этот веб-сервис передает результаты другим приложениям через собственный веб-сервис и сохраняет запрос в таблице.

Я пытаюсь быстро импортировать результаты в таблицу из набора данных.

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

Вариант 2 - массовая загрузка набора данных в sql. Плохая новость для меня - я понятия не имею, как это сделать !! Может ли кто-нибудь помочь?

Ответы [ 4 ]

2 голосов
/ 22 мая 2009

Вы можете использовать SqlBulkCopy . Простой SqlBulkCopy может выглядеть так:

DataTable dtMyData = ... retrieve records from WebService
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString)) {
    bulkCopy.BulkCopyTimeout = 120; // timeout in seconds, default is 30
    bulkCopy.DestinationTableName = "MyTable"; 
    bulkCopy.WriteToServer(dtMyData);
}

Если вы обрабатываете большой объем данных, вы также можете установить свойство BatchSize .

0 голосов
/ 22 мая 2009

Если время на вашей стороне, вы можете использовать технологию SQL Server Service Broker, однако изначально существует довольно крутая кривая обучения.

http://msdn.microsoft.com/en-us/library/ms166043(SQL.90).aspx

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

0 голосов
/ 22 мая 2009

Использование массовой загрузки может быть затруднено по разным причинам, начиная с того, что вы делаете, это специфично для конкретной СУБД. (Следующее, что обычно приходит к вам, это где файл с данными должен быть расположен.)

Тем не менее, вы часто можете значительно повысить производительность портативным способом, просто выполнив все свои INSERT в одной транзакции:

BEGIN TRANSACTION
INSERT ...
INSERT ...
...
COMMIT TRANSACTION
0 голосов
/ 22 мая 2009

Звучит как могучий маленький веб-сервис.

Вы могли бы вместо этого (или даже дополнительно) рассмотреть возможность сделать его асинхронным или многопоточным. В противном случае вы только что встроили связь между двумя веб-приложениями, которую вы могли бы разделить, чтобы избежать во-первых.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...