Импортируйте несколько строк во временную таблицу за один проход на SQL Server через SqlDataRecord.C#

Место общения программистов C#
Ответить
Anonymous
 Импортируйте несколько строк во временную таблицу за один проход на SQL Server через SqlDataRecord.

Сообщение Anonymous »

Итак, эта проблема только начинает проявляться в профилировщике.
У нас есть что-то похожее на это.

Код: Выделить всё

   using (var cmd = connection.CreateCommand()) {
cmd.CommandText = "INSERT INTO #Ids VALUES (@0);";
cmd.Parameters.Add(cmd.CreateParameter() { ParameterName = "@0", DbType = DbType.Integer });
cmd.Prepare();
foreach (var value in values)
{
((IDbDataParameter)cmd.Parameters[0]).Value = value;
cmd.ExecuteNonQuery();
}
}
Мы рассматриваем возможность ускорить этот процесс за счет уменьшения количества поездок туда и обратно. Использовать здесь DataTable было бы чудовищно, но есть тип SqlDataRecord, который кажется подходящим, поэтому мы сможем сделать что-то вроде этого:

Код: Выделить всё

   using (var cmd = connection.CreateCommand()) {
cmd.CommandText = "INSERT INTO #Ids SELECT * FROM @0;";
var param  = cmd.CreateParameter();
param.ParameterName = "@0";
// FIXME more properties
cmd.Parameters.Add(param);
param.Value = values.Cast().Select((x) => {
// FIXME Create new SqlDataRecord
}.ToList();
cmd.ExecuteNonQuery();
}
Я не могу найти примеров API и понятия не имею, как его использовать. Из-за бессмысленности типов в SqlClient обычная Visual Studio Intellisense бесполезна.
Как мне заполнить комментарии FIXME выше?
Связанный вопрос, нет хороших ответов: как мне создать временную таблицу в SQL Server, если у меня большой список идентификаторов

Подробнее здесь: https://stackoverflow.com/questions/786 ... -via-sqlda
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»