вставить данные для списка объектов в базу данных - PullRequest
0 голосов
/ 24 августа 2011

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

В этот момент я могу либо вызвать хранимую процедуру upsertContact 10 раз с измененными пользователем данными в цикле, либо отправить XML-файл в формате <contact><firstname>name</firstname><lastname>lname</lastname></contact> со всеми 10 вместе в хранимую процедуру. Я всегда заканчиваю тем, что делал xml.

Есть ли лучший способ сделать это? Будет ли метод xml прерываться, если имеется большое количество записей из-за размера. Если да, то как люди достигают такой функциональности?

К вашему сведению, обычно это не просто прямое обновление таблицы, поэтому я не изучал sqldatasource.

Изменение: на основании запроса, версия до сих пор была SQL 2005, но сейчас мы обновляем ее до 2008 года. Итак, любые новые функции приветствуются. Благодаря.

Обновление : основываясь на этой статье и отзывах ниже, я думаю, что Табличные Значимые Параметры - лучший подход для выбора. Кроме того, новая функциональность merge в SQL Server 2008 прекрасно работает с TVP.

Ответы [ 4 ]

4 голосов
/ 24 августа 2011

Какая версия SQL Server?Вы можете использовать табличные параметры в SQL Server 2008+ ... они очень мощные, даже если они предназначены только для чтения и будут менее трудоемкими, чем XML, и менее трудными, чем преобразование в ORM (IMHO).Найдите следующие ресурсы:

MSDN: Табличные параметры:

http://msdn.microsoft.com/en-us/library/bb510489%28SQL.100%29.aspx

Массивы и списки Эрланда Соммарского в SQL Server 2008 / Табличные параметры:

http://www.sommarskog.se/arrays-in-sql-2008.html#TVP_in_TSQL

0 голосов
/ 24 августа 2011

Тип данных Sql Server XML аналогичен типу VARCHAR (MAX), поэтому для его разрушения потребовалось бы действительно большое изменение.

В прошлом при сохранении запросов XML я использовал аналогичный методи ответы и не нашли проблем с ним.Не уверен, что это «лучшее» решение, но «лучшее» всегда относительное.

0 голосов
/ 24 августа 2011

Похоже, вы могли бы использовать Object-Relational-Management (ORM) решение, такое как NHibernate или Entity Framework .Эти решения предоставляют вам возможность вносить изменения в объекты и распространять изменения в базе данных поставщиком ORM.Это делает их намного более гибкими, чем выдача собственных SQL-операторов в базу данных.Они также выполняют оптимизацию, например отправку всех изменений в одной транзакции по одному соединению.

0 голосов
/ 24 августа 2011

Я думаю, что непосредственное манипулирование XML в базе данных будет более трудным, чем стоит идти по этому пути; Я бы предложил вместо этого сделать каждый звонок отдельным, как вы предлагаете; 10 звонков, чтобы сохранить каждый контакт.

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

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