Подскажите, в C# есть параметризованный, где можно перечислить списки параметров, а затем за кулисами при передаче параметров произойдет экранирование параметров и все такое.
А есть ли средства, что бы можно было пульнуть коллекцию в такой запрос
INSERT INTO T1 (F1,F2) VALUES (@F1,@F2)
и сгенерировалось бы:
INSERT INTO T1 (F1,F2) VALUES (1,1),(2,2),(3,3)...(n,n)
?
Или подобное делается только ручками?
Можно спустить вставляемые записи в виде Table-Valued Parameter, примерно так:
Создать табличный тип для передаваемого параметра:
CREATE TYPE dbo.CategoryTableType AS TABLE
( CategoryID int, CategoryName nvarchar(50) )
И передать из C# параметр в виде DataTable
, IEnumerable<SqlDataRecord>
, или DbDataReader
:
string sqlInsert = @"INSERT INTO dbo.Categories (CategoryID, CategoryName)
SELECT nc.CategoryID, nc.CategoryName FROM @tvpNewCategories AS nc";
SqlCommand insertCommand = new SqlCommand(sqlInsert, connection);
SqlParameter tvpParam = insertCommand.Parameters.AddWithValue("@tvpNewCategories", addedCategories);
tvpParam.SqlDbType = SqlDbType.Structured;
tvpParam.TypeName = "dbo.CategoryTableType";
Полный пример есть в MSDN: Table-Valued Parameters
Если данных много (больше 1000 строк) - лучше вставлять данные через запихнуть через bulk insert, вызовом SqlBulkCopy.WriteToServer
.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Дано: с помощью одномерного массива нужно эмулировать работу с двумерным массивом, массив должен позволять описывать поле игры морской...
Хочу, чтобы в адресной строке, отображалось название страницы на которой нахожусьПрочитал кучу всего, но увы, node js мне пока не подается