2013-08-07 4 views
0

У меня есть метод, который принимает int [] (userIDs) и int (groupID) в качестве параметров. Затем он запускает хранимую процедуру и вставляет данные в БДхранимая процедура asp.net вставляет несколько пар данных в БД

For example: 
if userIDs=[1,2,3] and groupID=4, 
then I want the following data to be inserted into the DB 
userID groupID 
1   4 
2   4 
3   4 

У меня есть 2 решения этой проблемы. Первый заключается в том, чтобы написать хранимую процедуру, которая вставляет одну запись в БД. В способе(), я петлевые через Int [] и вызвать хранимые процедуры п раз

method() 
for (int i =0; i< userID.length; i++){ 
    // call stored procedure to insert a single record 
} 

Второе решение состоит в передаче INT [] и Int в качестве параметров хранимых процедур и сделать цикл в хранимую процедуру.

Какой способ является лучшим решением? (если его второе решение лучше, может ли кто-нибудь дать указания по обращению с int [] в хранимой процедуре)

ответ

0

Geeeeeeeeeeeenerственно, код быстрее для этого. Вы отключаетесь от своего массива на стороне C#, а затем вызываете хранимую процедуру для обработки вашей конкретной записи.

Теперь, конечно, специфика изменится, и это, безусловно, звучит лучше всего в одном большом выстреле. Преобразуйте массив int в datatable, а затем у вас может быть real fun ...

+1

Вообще-то, это неправильно. Если вы выполняете n раз, вам понадобятся n сетевых вызовов и n выполнение, которое в значительной степени всегда медленнее, чем один сетевой вызов и одно исполнение с несколькими вставками. – Linky

+0

Достаточно честный, но обычно мы не просто демпинг данных прямо в базу данных; обычно мы делаем что-то с этими данными, прежде чем переходить на SQL, и именно тогда SQL не играет, а обрабатывает его в коде. Следовательно, «общий» и, следовательно, почему этот конкретный вопрос на самом деле лучше всего делать на стороне SQL. –

+1

. Я полностью согласен с вами в том, что некоторые операции (разделение строк, циклы, почти все, что касается одиночных записей вместо наборов) проще (и более разумно), чтобы кодировать и поддерживать в C# ... – Linky

0

Если все, что вы делаете, это добавление строк в базу данных, я не вижу необходимости в хранимой процедуре (если это не требование поступающих от администратора базы данных или политики).

Просто проведите по пунктам и добавьте записи в базу данных с помощью ADO.NET или Entity Framework.

1

Есть ли веская причина, почему вы не хотите использовать картографию O/R? Ваш пример выглядит как сервер/код, и вы можете использовать Entity Framework (или другое) для вставки новых значений. Если вы не можете использовать их, я бы использовал подход for (2-й в вашей публикации). Но это опасно, потому что вы не в какой-либо транзакции.

Вы можете начать исследование Entity Framework здесь: http://www.asp.net/entity-framework. Если вы по каким-либо причинам не можете использовать EF, рассмотрите возможность использования области транскрипции для ваших команд sql (см. http://msdn.microsoft.com/en-us/library/777e5ebh.aspx для начала чтения)

+0

Спасибо. извините, я довольно новичок в asp-net. можете ли вы кратко объяснить O/R ват и сервер/код позади? – kaboom

+1

Я добавил некоторые ссылки для O/R в своем ответе. Code-Behind означает, что вы выполняете код на сервере (например, события из ваших элементов управления). – Bjoern

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