Лучший подход для вставки новой записи с 40 столбцами из приложения VB.Net - PullRequest
0 голосов
/ 20 февраля 2009

Мой коллега работает над приложением .NET. Ему нужно написать функцию сохранения для своего объекта.

Обычно он использовал бы хранимую процедуру в SQL Server для этого, но с 40 столбцами, что является довольно сложной задачей.

Несколько других наших коллег предпочли использовать XSD для взаимодействия с базой данных.

Что даст компромисс между максимальными усилиями, ремонтопригодностью и эффективностью при работе с большими записями?

Ответы [ 4 ]

1 голос
/ 20 февраля 2009

Подход, который сработал для меня, заключается в создании хранимой процедуры, которая принимает один параметр - строку XML. Затем вы можете либо использовать встроенные средства sql для xpath к данным в строке, либо просто разобрать их.

Скажите, что ваш xml выглядит так:

<data>
<col1 value="myVal">
<col2 value="myVal2">
<col3 value="myVal3">
</data>

Ваш sproc будет выглядеть примерно так:

Create Procedure InsertData @xml xml
as

DECLARE @hDoc int
--Prepare input values as an XML documnet
exec sp_xml_preparedocument @hDoc OUTPUT, @xml

Insert Into MyTable(col1,col2,col3)
select col1,col2,col3
from OPENXML(@hdoc,'/data/')
WITH (col1 varchar(100) '/data/col1/@value', col2 varchar(100) '/data/col2/@value', col3 varchar(100) '/data/col3/@value')
EXEC sp_xml_removedocument @hDoc

GO

Вы можете узнать больше об этом здесь: http://technet.microsoft.com/en-us/library/ms187897.aspx

0 голосов
/ 23 февраля 2009

Это один из тех вопросов, на которые действительно нет ответа.

Это зависит от того, чего вы пытаетесь достичь в то время.

Я бы обычно использовал хранимую процедуру на том основании, что я могу написать меньше строк кода, а также я могу настроить хранимую процедуру, не перестраивая и не развертывая ничего. Если мне нужно добавить новые поля, тогда явно требуется дополнительный код.

Если скорость становится проблемой, я могу найти более сложные решения.

Мне нравится предложение Брендана об использовании XML, однако я думаю, что мы могли бы проделать большую работу, просто чтобы избежать создания слишком большого количества параметров. Я вижу, что это был бы очень хороший способ справиться с ситуацией, когда мы достигли какого-то короля лимита.

0 голосов
/ 20 февраля 2009

Я подозреваю, что вы используете ado.net здесь.

Если у вас есть ленивый вариант использования SqlCommandBuilder для автоматического создания, обновления и удаления операторов. SqlCommandBuilder проверяет SqlDataAdapter, который настроен с помощью одного запроса, который выбирается из одной таблицы. Запрос даже может быть выбран *

0 голосов
/ 20 февраля 2009

XSD не влияет на связь между приложением и базой данных. Что вы используете для общения с БД? DataAdapters? Вы должны использовать параметры в командах для значений. Затем вы можете использовать прямой доступ к таблице или хранимые процедуры. Прямой доступ к таблице более быстрый, но SP (как правило) более эффективны.

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