Как выполнить массовую вставку в существующую таблицу базы данных с помощью ado.net 3.5 - PullRequest
1 голос
/ 07 октября 2009

У меня есть таблица в базе данных, в которой уже есть 100 записей. Теперь мне нужно вставить еще 100 записей. Теперь, какой объект мы должны использовать? будь то dataadapter или sqlbulkcopy?

Ответы [ 3 ]

4 голосов
/ 07 октября 2009

Если базовый поставщик ADO.Net поддерживает пакетирование SQL, вы можете использовать DataAdapter . Если вы используете сервер SQL, вы можете использовать SqlBulkCopy . SqlBulkCopy имеет преимущества в скорости, поскольку вы можете напрямую вставлять данные в базу данных, но работает только с SQL-сервером. Если вам нужно использовать пользовательские вставки, хранимые процедуры или других поставщиков данных, вам необходимо использовать DataAdapter. Метод .Update в DataAdapter по умолчанию запускается в пакетном режиме, при котором одновременно отправляется множество записей в базу данных, если выполняется вставка на сервер, а не зацикливание записей по одному на клиенте. .

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

Также для загрузки данных вы также можете обратиться к Службы интеграции SQL Server (SSIS)

Edit:

anishmarokey также делает очень хорошую мысль. Для обработки 100 записей не имеет значения, как вы делаете вставки. Даже с циклическим выполнением записей и выполнением пользовательских SQL-операций INSERT будут работать достаточно быстро.

3 голосов
/ 07 октября 2009

Я думаю sqlbulkcopy не требуется. sqlbulkcopy предназначен для вставки больших (миллионов) данных.

Примечание: sqlbulkcopy - .NET Framework и .NET Compact Framework не поддерживают все версии каждой платформы

1 голос
/ 07 октября 2009

Я предполагаю две вещи: вы работаете с SQL Server и вставляете свои записи из внешнего файла. Вот пример необходимого кода T-SQL - он довольно прост (введите его прямо в окне подсказки SQL в Mgmnt Studio):

BULK INSERT TableName
        FROM 'C:\SomeDirectory\SomeFile.txt'
            WITH
    (
                FIELDTERMINATOR = ',',
                ROWTERMINATOR = '\n'
    )
GO

100 записей или 1 миллион, это достаточно просто, поэтому нет никакой причины , а не , чтобы использовать групповую вставку, когда вы хотите импортировать из файла CSV. Если CSV не соответствует структуре вашей таблицы, то (то, что я делаю) создайте временную таблицу, выполните импорт, а затем используйте INSERT (как показано ниже), чтобы скопировать из временной таблицы в вашу целевую таблицу, выбрав только поля или заказ, который вам нужен.

На всякий случай - если вы вставляете еще 100 записей из другой таблицы или запроса, синтаксис:

Insert Into [dbName].[dbo].[TableName]
  Select Field1, Field2...FieldN From OtherTableName Where {Some conditions}

Если ваша вставка будет содержать поле Identity, это:

Set IDENTITY_INSERT TableName ON
GO

Insert Into [dbName].[dbo].[TableName] (Field1, Field2...FieldN)
  Select Field1, Field2...FieldN From OtherTableName Where {Some conditions}
GO

Set IDENTITY_INSERT TableName OFF
GO

Обратите внимание, что вы должны явно включить список полей на вставке, если у вас есть поле идентификатора, где вам не нужно делать это иначе.

...