Делать многократные поездки против использования временной таблицы? - PullRequest
0 голосов
/ 06 сентября 2011

Мне нужно сохранить список записей с несколькими столбцами.У меня есть два способа сделать это.

  1. Я могу просто создать список этого элемента и выполнить хранимую процедуру несколько раз из кода

    foreach (тест TestInfoв lstTestInfo) {// выполнить хранимую процедуру}

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

Хотя это не серьезная проблема ... я хочу кое-что понять.Спасибо!

Ответы [ 5 ]

3 голосов
/ 06 сентября 2011

Будьте проще.Начните с решения, которое вы легче всего сможете реализовать надежным способом, которое, я считаю, является первым.

Затем вы можете проверить, достаточно ли высока производительность и пересмотреть реализацию, если у вас возникли проблемы сэто.

1 голос
/ 06 сентября 2011

Это часто задаваемый вопрос, и есть много возможных ответов. Вы, например, рассматривали [несколько необязательных параметров? Эта статья Джо Селко охватывает этот вариант, а также содержит ссылки на «классические» статьи на эту тему Эрланда Соммарского.

1 голос
/ 06 сентября 2011

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

public void UpdateUserItems(Guid userId, string[] items)
{
    using (SqlConnection conn = new SqlConnection("connectionstring..."))
    {
        using (SqlCommand cmd = new SqlCommand("Insert Into UserItems(UserId, Items) values (@UserId, @Items)"))
        {
            conn.Open();
            cmd.Parameters.AddWithValue("@UserId", userId);
            foreach(string item in items)
            {
                cmd.Parameters.AddWithValue("@Item", Item;
                cmd.ExecuteNonQuery();
            }
        }
    }
}
1 голос
/ 06 сентября 2011

Если вы попытаетесь реализовать второй вариант, длина самой строки может быть помехой.Вы отправляете так много данных.Чем эффективнее данные, тем эффективнее решение.

Более того, выполнение нескольких вызовов (решение 1) в БД также является дополнительной нагрузкой.Вы также можете испортить транзакции, предполагая, что несколько ячеек зависят от обновления других.

решите сами, это компромисс, который вам нужно сделать.

1 голос
/ 06 сентября 2011

Есть два способа взглянуть на это. 1. Делай то, что легко против 2. Делай то, что правильно? Первый вариант прост, но не тот, который даст вам долгосрочное решение. Рано или поздно вы поймете, что это не приводит к правильным результатам, и это самый тривиальный способ сделать это. Это может хорошо работать, когда у вас мало пользователей и все настроено на одном компьютере.

Второй подход, однако, не только уменьшает количество электронных переводов, но и минимизирует количество обращений к базе данных. Вы говорите о выполнении SP, что означает, что соединение будет задействовано ... каждый вызов DB является накладным, и мы должны попытаться минимизировать это. Если у вас есть среда с балансировкой нагрузки с n-уровневым развертыванием, вы застрянете, вызывая БД на другом сервере, если вы выберете опцию №1

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

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