2009-10-07 2 views

ответ

4

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

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

Кроме того, для загрузки данных можно также посмотреть в SQL Server Intergration Services (SSIS)

Edit:

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

+0

+1 для хорошего объяснения :) – anishMarokey

+0

Хорошее объяснение, что ваш последний пункт действительно зависит от стоимости туда и обратно. Если это тот же сервер или у них очень быстрое соединение, я бы согласился, но там есть переломный момент. – JoshBerke

3

Я думаю, sqlbulkcopy не нужен. sqlbulkcopy - вставить объемные (миллионные) данные.

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

1

Я предполагаю две вещи: то, что вы работаете с 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} 

Если вставка будет включать в себя поле Удостоверение является:

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 

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

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