Declaración: Este artículo ha sido publicado en "Aplicaciones informáticas" Volumen 23 Número 11
Resumen: En el desarrollo de varios sistemas, el uso de procedimientos almacenados es un buen hábito, que no solo trae características como tablas temporales, funciones y cursores, sino también La depuración, la actualización y el mantenimiento se vuelven convenientes. Sin embargo, casi todas las llamadas a procedimientos almacenados están en el mismo modo y la principal diferencia es que los parámetros de cada procedimiento almacenado son diferentes. Entonces, ¿es posible utilizar un método para unificar todas las llamadas a procedimientos almacenados y reducir la programación innecesaria? Basado en el estudio de la base de datos SQL Server y ASP.NET, implementamos un método de llamada unificado. Este método solo necesita proporcionar el nombre del procedimiento almacenado al que se llamará y proporcionar valores de parámetros específicos al llamar, para que cualquier almacenado. Se puede llamar al procedimiento.
Palabras clave: procedimiento almacenado, tabla del sistema, vista de estructura de información, ADO.NET Código de identificación del documento: ② Informe de logros técnicos prácticos (tecnología), resumen de aprendizaje teórico y práctica social (ciencias sociales)
Llame a procedimientos almacenados de la misma manera en .NET
Resumen: El uso de procedimientos almacenados es un buen hábito en el desarrollo de proyectos. Proporciona tablas, funciones y cursores temporales, y la depuración, la actualización y el mantenimiento también pueden beneficiarse de ello. Sin embargo, casi todas las llamadas a un procedimiento almacenado siguen el mismo patrón. La diferencia entre ellos son los parámetros de cada procedimiento almacenado. Entonces, ¿podemos llamar al procedimiento almacenado de la misma manera a pesar de sus diferencias y reducir el código de programación? Lo hicimos después de estudiar SQL Server y .NET. nombre del procedimiento almacenado y los valores de sus parámetros, no es necesario que cree los parámetros usted mismo Palabra clave: procedimiento Stord, tabla del sistema, esquema de información, ADO.NET
Resumen: en el desarrollo de un proyecto, a menudo se llama al. procedimientos almacenados. Sin embargo, casi todas las llamadas a procedimientos almacenados siguen el mismo patrón. La principal diferencia radica en el tipo y valor de cada parámetro creado. Entonces, ¿es posible llamar a todos los procedimientos almacenados a través de una función (o clase)? Este artículo implementa un método de llamada unificado basado en el principio de utilizar las tablas del sistema proporcionadas por la base de datos. Este método solo necesita proporcionar el nombre del procedimiento almacenado al que se llamará y proporcionar valores de parámetros específicos al llamar, para que cualquiera. Se puede llamar al procedimiento almacenado.
Resumen: Tenemos que llamar a procedimientos almacenados de sistemas de bases de datos durante el desarrollo de un proyecto. Sin embargo, llamar a procedimientos almacenados es casi lo mismo, la principal diferencia es la diferencia entre el tipo o valor de los parámetros, etc. ¿Podemos llamar a cualquier procedimiento almacenado? ¿Una función (o una clase)? Según las tablas del sistema proporcionadas por los sistemas de bases de datos, en este artículo escribimos una clase para llamar a cualquier procedimiento almacenado. Para llamar a un procedimiento almacenado, los únicos parámetros que proporciona son el nombre del procedimiento almacenado y. el valor de todos los parámetros del procedimiento almacenado.
<DIV clase=texto4><B>1. Introducción</B></DIV>
En el desarrollo de varios sistemas, el uso de procedimientos almacenados es un buen hábito. No solo brinda características como tablas temporales, funciones y cursores, sino que también facilita la depuración, las actualizaciones y el mantenimiento. Durante el proceso de almacenamiento, los datos se pueden procesar y luego devolver, lo que puede proporcionar un mayor análisis y control de los datos. En las llamadas a procedimientos almacenados, encontramos que las llamadas a procedimientos almacenados siguen casi el siguiente patrón:
1. Declarar conexión Sql
2. Declare SqlCommand y establezca su propiedad Connection en la instancia de SqlConnection que acaba de declarar, establezca CommandName en el nombre del procedimiento almacenado y CommandType en el procedimiento almacenado.
3. Agregue todos los parámetros necesarios para las llamadas a procedimientos almacenados a la colección Parameters de la instancia SqlCommand que acaba de declarar 4. Llame al método ExecuteReader() de SqlCommand para obtener el conjunto de filas devuelto por el procedimiento almacenado.
4. Declare SqlDataAdapter y DataSet, establezca la propiedad SelectCommand de SqlDataAdapter en la instancia declarada en 3 y luego llame a su método Fill para completar el conjunto de filas devueltas en el DataSet.
5. Cerrar el objeto SqlConnection
6. Libere cada instancia de objeto declarada (Nota: 4 se refiere a los dos métodos de extracción de datos. Durante este proceso de llamada, encontramos que casi todas las llamadas a procedimientos almacenados están en este modo. La diferencia radica en el almacenamiento en el paso 2. Los diferentes nombres de proceso. son diferentes de los parámetros utilizados en cada llamada a procedimiento almacenado en el paso 3. Tienen diferencias en los nombres de los parámetros, direcciones, tipos de datos, longitudes, etc. Entonces, ¿hay alguna manera de implementar todas las llamadas a procedimientos almacenados? Es decir, solo necesita proporcionar el nombre del procedimiento almacenado y luego pasar los valores de los parámetros al método de llamada para realizar la llamada al procedimiento almacenado, y luego usar ciertas estructuras de datos para guardar el conjunto de filas devueltas, los valores de los parámetros salientes y valores de retorno del proceso. Después de estudiar las tablas del sistema de SQL Server, descubrimos que esta idea es factible.
2. Tablas del sistema y vistas de estructura de información.
Las bases de datos relacionales, como SQL Server, almacenan metadatos en la base de datos de alguna manera. En SQL Server, son la base de datos del sistema y las tablas del sistema. Después de instalar SQL Server, se generarán automáticamente cuatro bases de datos del sistema: master, model, msdb y tempdb. La base de datos maestra es el almacén de toda la información a nivel del sistema en SQL Server. Las cuentas de inicio de sesión, los ajustes de configuración, los procedimientos almacenados del sistema y la existencia de otras bases de datos se registran en la base de datos maestra. La base de datos msdb almacena información del Agente SQL Server. Cuando se definen trabajos, operadores y alertas, se almacenan en msdb. El modelo es una plantilla para todas las bases de datos generadas por el usuario. Al generar una nueva base de datos, copie el modelo y cree los objetos requeridos. tempdb guarda objetos temporales en SQL Server. La visualización de tablas temporales generadas y procedimientos almacenados temporales, así como objetos temporales generados por el sistema, utilizan tempdb. [1] Y cada base de datos tiene sus propias tablas del sistema. Estas tablas del sistema se utilizan para almacenar información de configuración y objetos. De estas tablas del sistema, podemos obtener información sobre todos los parámetros de cada procedimiento almacenado. Esta información se almacena en la tabla syscolumns. Hay nombres de parámetros, tipos, longitudes, direcciones, etc. que deben usarse en nuestro método. Sin embargo, los campos en las tablas del sistema cambiarán con la versión de SQL Server. Por ejemplo, type y xtype en syscolumns son un ejemplo de tales cambios. Ambos almacenan información de tipo. Para adaptar nuestro método a los cambios de versión de SQL Server, necesitamos utilizar la vista de estructura de información. ANSI-92 define las vistas de estructura de información como un conjunto de vistas que proporcionan datos del sistema. Al aprovechar esta vista, puede ocultar las tablas reales del sistema de su aplicación. Los cambios en las tablas del sistema no afectarán a las aplicaciones, por lo que las aplicaciones pueden ser independientes de los proveedores y las versiones de la base de datos. [1] ANSI-92 y SQL Server admiten el uso de una estructura de nombres de tres segmentos para hacer referencia a objetos en el servidor local. La terminología ANSI-92 se llama catalog.schema.object, mientras que SQL Server lo llama base de datos.owner.object. [1] Por ejemplo, si queremos encontrar toda la información de los parámetros de todos los procedimientos almacenados, podemos usar: seleccionar * de INFORMACIÓN_SCHEMA.PARAMETERS Si queremos encontrar toda la información de los parámetros de un determinado procedimiento almacenado, es: seleccionar. * de INFORMACIÓN_SCHEMA.PARAMETERS donde SPECIFIC_NAME ='Proc1 ' Con la vista de estructura de información, se han resuelto más de la mitad de nuestros problemas. A continuación veremos cómo implementar nuestro método en .NET.
3. El enfoque del método de implementación es cómo obtener toda la información de los parámetros del procedimiento almacenado en función de su nombre y luego crear automáticamente cada parámetro en función de esta información de parámetros. Para automatizar estas acciones, el proceso de declaración de SqlConnection, SqlCommand y SqlParameter, y el proceso de creación de cada SqlParameter deben ser invisibles para el usuario. Lo único que el usuario debe proporcionar es el nombre del procedimiento almacenado y luego proporciona varios parámetros al llamar, e incluso no es necesario proporcionar sus tipos.
3.1 Obtener y crear los parámetros del procedimiento almacenado Cómo obtener y crear los parámetros del procedimiento almacenado a llamar es un punto clave. Podemos implementar este paso automáticamente a través de la vista de estructura de información.
// Obtener y crear parámetros del procedimiento almacenado
private void GetProcedureParameter(params object[] parámetros)
{ SqlCommand myCommand2 = new SqlCommand();
myCommand2.Connection = this.myConnection2.CommandText
= "select * from INFORMACIÓN_SCHEMA.PARAMETERS donde SPECIFIC_NAME; = '" + this.ProcedureName + "' orden por ORDINAL_POSITION";
SqlDataReader lector = null; lector = myCommand2.ExecuteReader(); // Crear parámetro de retorno
myParameter = new SqlParameter();
myParameter.ParameterName = "@Value";
myParameter SqlDbType = SqlDbType.Int;
myParameter.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(myParameter);
// Crea cada parámetro automáticamente.
while(reader.Read())
{
myParameter = new SqlParameter();
myParameter.ParameterName = lector["PARAMETER_NAME"].ToString();
myParameter.Direction = lector["PARAMETER_MODE"].ToString()=="IN" ?ParameterDirection.Input:ParameterDirection.Output;
switch(reader["DATA_TYPE"].ToString()) {
caso "int":
if(myParameter.Direction == ParameterDirection.Input)
myParameter.Value = (int)parámetros[i] ;
myParameter.SqlDbType = SqlDbType.Int;
break; //... se omite una gran cantidad de procesamiento de tipos
predeterminado
:
break }
i++
;
3.2 Conjunto de datos de resultado de retorno, valor de retorno y conjunto de parámetros salientes Después de crear los parámetros del procedimiento almacenado, podemos llamar al procedimiento almacenado. Porque en .NET, las clases comúnmente utilizadas que devuelven conjuntos de resultados son SqlDataReader y DataSet, y SqlDataReader solo se puede usar mientras se mantiene una conexión, pero DataSet no. En nuestra implementación, la conexión debe desconectarse después de la llamada, por lo que se utiliza un DataSet para guardar el conjunto de resultados devuelto.
public SqlResult Call(params object[] parámetros){ // SqlResult es una clase autodefinida que se utiliza para guardar conjuntos de datos de resultados, valores de retorno y conjuntos de parámetros salientes. SqlResult result = new SqlResult(); // Defina su propia conexión como. necesario String
myConnection = new SqlConnection(ConnectionString);
myCommand =new
SqlCommand(this.ProcedureName, myConnection);
myCommand.CommandType = CommandType.StoredProcedure
; Almacene los parámetros del procedimiento y establezca los valores
GetProcedureParameter(parameters);
myAdapter.Fill(result.dataSet, "Table" // Obtenga el valor del parámetro saliente y el par de nombres del procedimiento almacenado y guárdelo en una tabla Hash). GetOutputValue(resultado); // Libera varios recursos aquí y desconecta
myAdapter.Dispose();
myCommand.Dispose(
);
myConnection.Close
();
4. Trabajo adicional Aunque nuestra implementación aquí es para la base de datos de SQL Server, este método se puede utilizar para cualquier base de datos que proporcione vistas de estructura de información, cumpla con el estándar ANSI-92 o proporcione metadatos. Lo encapsulamos en una clase SqlProcedure y el procedimiento almacenado se puede llamar fácilmente cuando sea necesario, lo que reduce una gran cantidad de trabajo de código básicamente repetitivo. Para que la clase SqlProcedure admita más tipos de datos, en el método GetProcedureParameter (), debe analizar el tipo, la dirección, la longitud, el valor predeterminado y otra información de cada parámetro de acuerdo con sus propias necesidades y luego crear este parámetro. Básicamente se puede implementar cualquier tipo, incluso se pueden crear tipos de imágenes de esta manera. De esta manera la clase puede ser muy general y útil en cualquier proyecto.
Referencias
[1] Ray Rankins, Paul Jensen, Paul Bertucci, Libro práctico de SQL Server 2000, Beijing: Electronic Industry Press, 2002
[2] Biblioteca MSDN, enero de 2003, Microsoft Corporation.
Sobre el autor: Liu Zhibo (1979-), hombre, de Xinhua, Hunan, maestría, principales direcciones de investigación: redes neuronales y reconocimiento de patrones, sistema de información de automatización de oficinas.
correo electrónico: [email protected]