Dirección original: http://www.51la.org/webjx/htmldata/2005-12-24/1135405777.html
Resumen Las llamadas a procedimientos almacenados se usan comúnmente en sistemas b/s. El método de llamada tradicional no sólo es lento, sino que el código seguirá expandiéndose a medida que aumente el número de procedimientos almacenados, lo que dificulta su mantenimiento. El nuevo método resuelve estos problemas hasta cierto punto.
Palabras clave asp.net; procedimientos almacenados En el proceso de uso de .net, el acceso a la base de datos es una parte muy importante, especialmente en el proceso de construcción del sistema b/s, la operación de la base de datos se ha convertido casi en una operación esencial. Llamar a procedimientos almacenados para implementar operaciones de bases de datos es un método utilizado por muchos programadores, y la mayoría de los programadores usan procedimientos almacenados si pueden, y rara vez usan declaraciones SQL directamente, por lo que los procedimientos almacenados son muy útiles e importantes.
Introducción a los procedimientos almacenados
En pocas palabras, un procedimiento almacenado es un procedimiento encapsulado compuesto por algunas declaraciones SQL y declaraciones de control. Reside en la base de datos y puede ser llamado por una aplicación cliente o desde otro procedimiento o disparador. Sus parámetros se pueden pasar y devolver. De manera similar a los procedimientos de función en una aplicación, los procedimientos almacenados se pueden llamar por su nombre y también tienen parámetros de entrada y salida.
Según los diferentes tipos de valores de retorno, podemos dividir los procedimientos almacenados en tres categorías: procedimientos almacenados que devuelven conjuntos de registros, procedimientos almacenados que devuelven valores numéricos (también llamados procedimientos almacenados escalares) y procedimientos almacenados de comportamiento. Como su nombre lo indica, el resultado de la ejecución de un procedimiento almacenado que devuelve un conjunto de registros es un conjunto de registros. Un ejemplo típico es recuperar registros que cumplen una o varias condiciones de la base de datos de un procedimiento almacenado que devuelve un valor; después de la ejecución, por ejemplo, en la base de datos Ejecute una función o comando con un valor de retorno, finalmente, el procedimiento almacenado de comportamiento solo se usa para implementar una determinada función de la base de datos sin un valor de retorno, como las operaciones de actualización y eliminación en la base de datos; .
Beneficios de utilizar procedimientos almacenados
En comparación con el uso directo de sentencias SQL, llamar directamente a procedimientos almacenados en una aplicación tiene los siguientes beneficios:
(1) Reducir el tráfico de red. Puede que no haya una gran diferencia en el tráfico de red entre llamar a un procedimiento almacenado con una pequeña cantidad de filas y llamar directamente a declaraciones SQL. Sin embargo, si el procedimiento almacenado contiene cientos de declaraciones SQL, su rendimiento es definitivamente mejor que llamar a declaraciones SQL una por una. uno mucho más alto.
(2) La velocidad de ejecución es más rápida. Hay dos razones: primero, cuando se crea el procedimiento almacenado, la base de datos ya lo analizó y optimizó una vez. En segundo lugar, una vez que se ejecuta el procedimiento almacenado, se retendrá una copia del procedimiento almacenado en la memoria, de modo que la próxima vez que se ejecute el mismo procedimiento almacenado, se pueda llamar directamente desde la memoria.
(3) Mayor adaptabilidad: dado que los procedimientos almacenados acceden a la base de datos a través de procedimientos almacenados, los desarrolladores de bases de datos pueden realizar cualquier cambio en la base de datos sin cambiar la interfaz del procedimiento almacenado, y estos cambios no afectarán la base de datos.
(4) Trabajo distribuido: el trabajo de codificación de la aplicación y la base de datos se puede realizar de forma independiente sin suprimirse entre sí.
Del análisis anterior, podemos ver que es necesario utilizar procedimientos almacenados en las aplicaciones.
Dos métodos diferentes para llamar a procedimientos almacenados
Para resaltar las ventajas del nuevo método, primero introduzcamos el método "oficial" para llamar a procedimientos almacenados en .net. Además, todos los programas de muestra de este artículo funcionan en la base de datos sqlserver. Otras situaciones son similares y no se explicarán una por una en el futuro. Todos los ejemplos de este artículo están en lenguaje C#.
Para acceder a la base de datos en una aplicación, los pasos generales son: primero declarar una conexión de base de datos sqlconnection y luego declarar un comando de base de datos sqlcommand para ejecutar declaraciones SQL y procedimientos almacenados. Con estos dos objetos, puede utilizar diferentes métodos de ejecución para lograr sus objetivos según sus propias necesidades. Lo que hay que agregar es que no olvide agregar la siguiente declaración de referencia a la página: usando system.data.sqlclient.
En lo que respecta a la ejecución de procedimientos almacenados, si se ejecuta el primer tipo de procedimiento almacenado, entonces se debe usar un adaptador de datos para completar los resultados en un conjunto de datos, y luego se puede usar el control de cuadrícula de datos para presentar los resultados en la página; si se ejecuta Si se trata del segundo y tercer procedimiento almacenado, este procedimiento no es necesario. Solo necesita determinar si la operación se completó con éxito en función de la devolución específica.
(1) El código para ejecutar un procedimiento almacenado sin parámetros es el siguiente:
conexión sqlconnection=nueva conexión sql("cadena de conexión");
sqldataadapter da = nuevo sqldataadapter();
da.selectcommand = nuevo sqlcommand();
da.selectcommand.connection = conexión;
da.selectcommand.commandtext = "nombredelprocedimiento";
da.selectcommand.commandtype = tipo de comando.procedimiento almacenado;
Luego simplemente elija la forma adecuada de realizar el proceso aquí para diferentes propósitos.
(2) El código para ejecutar un procedimiento almacenado con parámetros es el siguiente (podemos declarar la función que llama al procedimiento almacenado como exeprocedure(string inputdate)):
conexión sqlconnection=nueva conexión sql("cadena de conexión");
sqldataadapter da = nuevo sqldataadapter();
da.selectcommand = nuevo sqlcommand();
da.selectcommand.connection = conexión;
da.selectcommand.commandtext = "nombredelprocedimiento";
da.selectcommand.commandtype = tipo de comando.procedimiento almacenado;
(El código anterior es el mismo, el siguiente es el código que se agregará)
parámetro = nuevo sqlparameter("@parametername", sqldbtype.datetime);
param.dirección = dirección de parámetro.entrada;
param.value = convert.todatetime(fecha de entrada);
da.selectcommand.parameters.add(param);
Esto agrega un parámetro de entrada. Si necesita agregar parámetros de salida:
parámetro = nuevo sqlparameter("@parametername", sqldbtype.datetime);
param.dirección = dirección de parámetro.salida;
param.value = convert.todatetime(fecha de entrada);
da.selectcommand.parameters.add(param);
Para obtener el valor de retorno de un procedimiento almacenado de parámetro:
parámetro = nuevo sqlparameter("@parametername", sqldbtype.datetime);
param.dirección = dirección de parámetro.valor de retorno;
param.value = convert.todatetime(fecha de entrada);
da.selectcommand.parameters.add(param);
Del código anterior, podemos ver que cuando hay muchos procedimientos almacenados o muchos parámetros en los procedimientos almacenados, este método afectará en gran medida la velocidad de desarrollo, por otro lado, si el proyecto es relativamente grande, entonces estas funciones son para; La lógica de la base de datos también será una gran carga en el mantenimiento futuro. Entonces, ¿existe una forma mejorada de resolver este problema? Pensé que al ejecutar un procedimiento almacenado sin parámetros, solo necesitamos pasar el nombre de un procedimiento almacenado para llamar al procedimiento almacenado correspondiente, y en la base de datos sqlserver, podemos escribir directamente el "nombre del procedimiento almacenado (lista de parámetros) " en el analizador de consultas. Los procedimientos almacenados se pueden ejecutar con dichas cadenas. Entonces, ¿se puede aplicar esta idea a las aplicaciones?
Entonces escriba el código correspondiente en el compilador. Estos códigos se modifican en función del código que llama al procedimiento almacenado sin parámetros. El código específico es el siguiente:
conexión sqlconnection=nueva conexión sql("cadena de conexión");
sqldataadapter da = nuevo sqldataadapter();
da.selectcommand = nuevo sqlcommand();
da.selectcommand.connection = conexión;
da.selectcommand.commandtext = "nombredelprocedimiento('para1','para2',para3)";
da.selectcommand.commandtype = tipo de comando.procedimiento almacenado;
Para que el código sea más representativo, el primer y segundo parámetro del procedimiento almacenado que se llamará son de tipo cadena y el tercer parámetro es de tipo entero. Después de la ejecución, descubrí que se pueden lograr los resultados esperados.
Comparación de los dos métodos de llamada A través de la comparación, podemos ver que el segundo método tiene una ventaja obvia, es decir, puede aumentar la velocidad de desarrollo, ahorrar tiempo de desarrollo, el código es fácil de mantener y también reduce el tamaño del sistema. hasta cierto punto. Sin embargo, dado que el procesamiento de parámetros de procedimientos almacenados es relativamente general, si desea obtener parámetros de salida u obtener el valor de retorno de un procedimiento almacenado, este método no puede satisfacer las necesidades. Aun así, este método puede permitir a los desarrolladores guardar gran parte del código. Si no necesita obtener los parámetros de salida y los valores de retorno, casi puede hacerlo "de una vez por todas". Por lo tanto, en el desarrollo real de programas, este método todavía tiene cierto valor práctico.