Редактировать:
Моя проблема больше не проблема: у меня есть повторные тесты моих исполнений, и у меня есть смертельная глупая ошибка: я забыл x1000, чтобы получить секунды с миллисекунды:/ Жаль за этих ребят.
Для справки:
- Я делаю около 1900 обновлений в секунду с моего компьютера на сервер базы данных в локальной сети.
- 3.200 обновлений в секунду, если программы находятся на одной машине, кроме БД.
- 3.500 обновлений в секунду с моего ПК на сервере DataBase Я не воссоздаю и не открываю новое SQLConnection.
- 5.800 обновлений в секунду с пакетным текстом. Для моих 10.000 строк, если это занимает 5 секунд, это нормально для моих программ. Извините, что беспокоитесь.C# -SQL: Как выполнить пакет StoredProcedure?
На самом деле, я использую хранимую программу SQL для создания строки в моей базе данных, чтобы избежать SQL-инъекции. В C# у меня есть следующий метод:
public void InsertUser(string userCode)
{
using (SqlConnection sqlConnection = new SqlConnection(this.connectionString))
{
SqlCommand sqlCommand = new SqlCommand("InsertUser", sqlConnection);
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@UserCode", userCode));
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();///0.2 seconds !ERROR HERE! 0.2ms here,NOT 0.2sec!!!
}
}
Это хорошо, когда у меня есть одна или две строки для вставки. Но если мне нужно создать 1.000 пользователей и 10.000 продуктов и 5000 домашних животных, это не лучшее решение: я потеряю огромное время в netwok транспорте.
Я верю, не проверив, что я могу использовать только ограниченное количество обратных вызовов. Так что я не хочу называть 10.000 раз:
sqlCommand.BeginExecuteNonQuery()
Другим способом будет создавать текст пакета, но существует риск SQL-Injection (и это некрасиво).
Есть ли объект «SqlCommandList», который управляет этим .Net? Как делать большие записи в базе данных? Какой хороший патерн для этого?
Я бы порекомендовал использовать «sqlCommand.Prepare();» с типом параметра, который должен, по крайней мере, улучшить время выполнения второго запроса. – 2012-05-21 07:22:52