Исходный адрес: http://www.51la.org/webjx/htmldata/2005-12-24/1135405777.html
Аннотация Вызовы хранимых процедур обычно используются в системах b/s. Традиционный метод вызова не только медленный, но и код будет продолжать расширяться по мере увеличения количества хранимых процедур, что затрудняет его обслуживание. Новый метод в определенной степени решает эти проблемы.
Ключевые слова asp.net; хранимые процедуры. В процессе использования .net доступ к базе данных является очень важной частью, особенно в процессе построения системы b/s, работа с базой данных стала почти важной операцией. Вызов хранимых процедур для реализации операций с базой данных — это метод, используемый многими программистами, и большинство программистов используют хранимые процедуры, если могут, и редко используют операторы SQL напрямую, поэтому хранимые процедуры очень полезны и важны.
Введение в хранимые процедуры
Проще говоря, хранимая процедура — это инкапсулированная процедура, состоящая из некоторых операторов SQL и операторов управления. Она находится в базе данных и может быть вызвана клиентским приложением или из другой процедуры или триггера. Его параметры можно передавать и возвращать. Подобно функциональным процедурам в приложении, хранимые процедуры могут вызываться по имени, а также имеют входные и выходные параметры.
В соответствии с различными типами возвращаемых значений мы можем разделить хранимые процедуры на три категории: хранимые процедуры, возвращающие наборы записей, хранимые процедуры, возвращающие числовые значения (также называемые скалярными хранимыми процедурами) и поведенческие хранимые процедуры. Как следует из названия, результатом выполнения хранимой процедуры, возвращающей набор записей, является набор записей. Типичным примером является извлечение записей, удовлетворяющих одному или нескольким условиям, из базы данных. Хранимая процедура, возвращающая числовое значение, возвращает значение. после выполнения, например, в базе данных. Выполнить функцию или команду с возвращаемым значением, наконец, поведенческая хранимая процедура используется только для реализации определенной функции базы данных без возвращаемого значения, например операций обновления и удаления в базе данных; .
Преимущества использования хранимых процедур
По сравнению с непосредственным использованием операторов SQL прямой вызов хранимых процедур в приложении имеет следующие преимущества:
(1) Сокращение сетевого трафика. Большой разницы в сетевом трафике между вызовом хранимой процедуры с небольшим количеством строк и прямым вызовом операторов SQL может не быть. Однако если хранимая процедура содержит сотни операторов SQL, ее производительность определенно выше, чем вызов операторов SQL по одному. один намного выше.
(2) Скорость выполнения выше. На это есть две причины. Во-первых, когда хранимая процедура создается, база данных уже однажды проанализировала и оптимизировала ее. Во-вторых, после выполнения хранимой процедуры копия хранимой процедуры сохраняется в памяти, так что при следующем выполнении той же хранимой процедуры ее можно будет вызвать непосредственно из памяти.
(3) Повышенная адаптивность. Поскольку хранимые процедуры получают доступ к базе данных через хранимые процедуры, разработчики баз данных могут вносить любые изменения в базу данных, не меняя интерфейс хранимых процедур, и эти изменения не повлияют на базу данных.
(4) Распределенная работа: работа по кодированию приложения и базы данных может выполняться независимо, не подавляя друг друга.
Из приведенного выше анализа мы видим, что в приложениях необходимо использовать хранимые процедуры.
Два разных метода вызова хранимых процедур
Чтобы подчеркнуть преимущества нового метода, давайте сначала представим «официальный» метод вызова хранимых процедур в .net. Кроме того, все примеры программ в этой статье работают с базой данных sqlserver. Другие ситуации аналогичны и не будут подробно описаны в будущем. Все примеры в этой статье написаны на языке C#.
Чтобы получить доступ к базе данных в приложении, необходимо выполнить следующие общие действия: сначала объявить соединение с базой данных sqlconnection, а затем объявить команду базы данных sqlcommand для выполнения операторов sql и хранимых процедур. С помощью этих двух объектов вы можете использовать разные методы выполнения для достижения своих целей в соответствии с вашими потребностями. Что необходимо добавить, так это не забудьте добавить на страницу следующий ссылочный оператор: using system.data.sqlclient.
Что касается выполнения хранимых процедур, то если выполняется первый тип хранимой процедуры, то необходимо использовать адаптер данных для заполнения результатов в набор данных, а затем можно использовать элемент управления сеткой данных для представления результатов на странице; если выполняется. Если это вторая и третья хранимые процедуры, эта процедура не нужна. Вам нужно только определить, успешно ли завершилась операция, на основе конкретного возврата.
(1) Код для выполнения хранимой процедуры без параметров выглядит следующим образом:
sqlconnection conn = новый sqlconnection («строка подключения»);
sqldataadapter da = новый sqldataadapter();
da.selectcommand = новая sqlcommand();
da.selectcommand.connection = подключение;
da.selectcommand.commandtext = "имяпроцедуры";
da.selectcommand.commandtype = commandtype.storedprocedure;
Затем просто выберите подходящий способ выполнения процесса здесь для разных целей.
(2) Код для выполнения хранимой процедуры с параметрами выглядит следующим образом (мы можем объявить функцию, вызывающую хранимую процедуру, как exeprocedure(string inputdate)):
sqlconnection conn = новый sqlconnection («строка подключения»);
sqldataadapter da = новый sqldataadapter();
da.selectcommand = новая sqlcommand();
da.selectcommand.connection = подключение;
da.selectcommand.commandtext = "имяпроцедуры";
da.selectcommand.commandtype = commandtype.storedprocedure;
(Приведенный выше код тот же, следующий код нужно добавить)
param = новый sqlparameter("@parametername", sqldbtype.datetime);
параметр.направление = параметрнаправление.вход;
param.value = Convert.todatetime(inputdate);
da.selectcommand.parameters.add(параметр);
Это добавляет входной параметр. Если вам нужно добавить выходные параметры:
param = новый sqlparameter("@parametername", sqldbtype.datetime);
параметр.направление = параметрнаправление.выход;
param.value = Convert.todatetime(inputdate);
da.selectcommand.parameters.add(параметр);
Чтобы получить возвращаемое значение хранимой процедуры параметра:
param = новый sqlparameter("@parametername", sqldbtype.datetime);
параметр.направление = параметрнаправление.возвратное значение;
param.value = Convert.todatetime(inputdate);
da.selectcommand.parameters.add(параметр);
Из приведенного выше кода мы видим, что когда в хранимых процедурах много хранимых процедур или много параметров, этот метод сильно влияет на скорость разработки. С другой стороны, если проект относительно большой, то эти функции для; логика базы данных будет. Это также станет большим бременем при дальнейшем обслуживании. Итак, есть ли улучшенный способ решения этой проблемы? Я думал, что при выполнении хранимой процедуры без параметров нам нужно только передать имя хранимой процедуры для вызова соответствующей хранимой процедуры, а в базе данных sqlserver мы можем напрямую ввести «имя хранимой процедуры (список параметров)» " в анализаторе запросов. С такими строками можно выполнять хранимые процедуры. Итак, можно ли применить эту идею к приложениям?
Поэтому введите соответствующий код в компилятор. Эти коды изменяются на основе кода, вызывающего хранимую процедуру без параметров. Конкретный код выглядит следующим образом:
sqlconnection conn = новый sqlconnection («строка подключения»);
sqldataadapter da = новый sqldataadapter();
da.selectcommand = новая sqlcommand();
da.selectcommand.connection = подключение;
da.selectcommand.commandtext = "nameofprocedure('para1','para2',para3)";
da.selectcommand.commandtype = commandtype.storedprocedure;
Чтобы сделать код более представительным, первый и второй параметры вызываемой хранимой процедуры имеют строковый тип, а третий параметр — целочисленный тип. После выполнения я обнаружил, что ожидаемых результатов можно достичь!
Сравнение двух вызывающих методов. Сравнивая, мы видим, что второй метод имеет очевидное преимущество, то есть он может увеличить скорость разработки, сэкономить время разработки, код легко поддерживать, а также уменьшает размер системы. в определенной степени. Однако, поскольку обработка параметров хранимой процедуры является относительно общей, если вы хотите получить выходные параметры или получить возвращаемое значение хранимой процедуры, этот метод не может удовлетворить потребности. Несмотря на это, этот метод может позволить разработчикам сохранить большую часть кода. Если вам не нужно получать выходные параметры и возвращаемые значения, вы можете сделать это практически «раз и навсегда». Поэтому при реальной разработке программ этот метод все же имеет определенную практическую ценность.