CÓMO: Utilizar Visual C# .NET para llamar a los procedimientos almacenados de SQL Server desde ASP.NET

Seleccione idioma Seleccione idioma
Id. de artículo: 320916 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se muestra cómo utilizar ASP.NET y ADO.NET con Visual C# .NET para crear un procedimiento almacenado de Microsoft SQL Server y llamarlo con un parámetro de entrada y otro de salida.

El código de ejemplo de este artículo comprueba si el procedimiento almacenado que va a crear existe en la base de datos Pubs, que se incluye con una instalación estándar de Microsoft SQL Server. Si no existe, el código crea uno que acepta un parámetro para buscar en la tabla Authors por apellidos y devuelve las filas coincidentes y el número de filas devueltas en un parámetro de salida.

En este artículo también se muestra cómo crear un Web Form que proporciona una interfaz de usuario sencilla. El Web Form contiene los elementos siguientes:
  • Un cuadro de texto en el que el usuario escribe la condición de búsqueda.
  • Un control DataGrid que muestra los resultados de la búsqueda.
  • Un control Label que muestra el número de registros devueltos.
  • Un control Button que llama al procedimiento almacenado cuando se hace clic en el botón.

Requisitos

En la lista siguiente se describe el hardware, el software, la infraestructura de red y los Service Packs recomendados que necesitará:
  • Microsoft SQL Server versión 7.0 o posterior
  • Microsoft Visual Studio .NET
  • Microsoft Visual C# .NET
  • Permisos para crear el procedimiento almacenado en la base de datos
En este artículo se da por supuesto que está familiarizado con los temas siguientes:
  • ASP.NET
  • Procedimientos almacenados de SQL Server

Crear un proyecto ASP.NET y agregar controles

En esta sección va a crear un proyecto ASP.NET y la interfaz básica de usuario. Tenga en cuenta que en estos pasos se utiliza código de Microsoft Visual C# .NET. Para crear el proyecto, siga estos pasos:
  1. Haga clic en Inicio, seleccione Programas, Microsoft Visual Studio .NET y, a continuación, haga clic en Microsoft Visual Studio .NET.
  2. En la página de inicio de Visual Studio .NET, haga clic en Nuevo proyecto.
  3. En el cuadro de diálogo Nuevo proyecto, haga clic en Proyectos Visual C# en Tipos de proyecto y, después, haga clic en Aplicación Web ASP.NET en Plantillas.
  4. En el cuadro Nombre, escriba un nombre para la aplicación Web y haga clic en Aceptar.
  5. Agregue los siguientes controles de servidor al Web Form y establezca las propiedades indicadas en la tabla:
    Contraer esta tablaAmpliar esta tabla
    ControlPropiedad IDPropiedad Text
    LabellblLastNameEscriba los apellidos del Autor:
    TextBoxtxtLastName%
    ButtonbtnGetAuthorsObtener autores
    LabellblRowCount(Número de filas)

  6. Arrastre un control de servidor DataGrid desde el cuadro de herramientas al Web Form y establezca la propiedad Name como GrdAuthors.
  7. Haga clic con el botón secundario del mouse (ratón) en la cuadrícula y, a continuación, haga clic en Autoformat.
  8. Haga clic en Professional 1 para el esquema y haga clic en Aceptar.

Crear el procedimiento almacenado GetAuthorsByLastName

Use el siguiente código de Transact-SQL para crear el procedimiento almacenado GetAuthorsByLastName:
Use Pubs Go Create Procedure GetAuthorsByLastName (@au_lname varchar(40), @RowCount int output) as 

select * from authors where au_lname like @au_lname; 

/* @@ROWCOUNT devuelve el número de filas afectadas por la última instrucción. */ select @RowCount=@@ROWCOUNT
				
Este código incluye dos parámetros: @au_lname y @RowCount. @au_lname es un parámetro de entrada que obtiene la cadena de búsqueda para realizar una búsqueda "like" en la tabla Authors. @RowCount es un parámetro de salida que utiliza la variable @@ROWCOUNT para obtener las filas afectadas.

Crear y ejecutar el procedimiento almacenado

Para tener acceso a las bases de datos de SQL Server, tiene que importar el espacio de nombres System.Data.SqlClient, que proporciona nuevos objetos como SqlDataReader y SqlDataAdapter. Puede utilizar SqlDataReader para leer una secuencia de filas sólo hacia delante en una base de datos de SQL Server. DataAdapter representa un conjunto de comandos de datos y una conexión de base de datos que se puede utilizar para llenar el objeto DataSet y actualizar una base de datos de SQL Server.



ADO.NET también presenta el objeto DataSet, que es una representación de datos residente en memoria que ofrece un modelo de programación relacional coherente sin importar el origen de los datos. En el código de esta sección se emplean todos estos objetos.
  1. Haga doble clic en el formulario Web Form.
  2. Agregue el código siguiente (las directivas using) a la sección Declaration del Web Form, que aparece en la parte superior de la ventana de código:
    using System.Data; using System.Data.SqlClient;
    					
  3. Para asegurarse de que el procedimiento almacenado existe y crear otro nuevo, utilice un objeto SqlCommand con un objeto SqlDataReader. Puede emplear SqlCommand para ejecutar cualquier comando SQL contra la base de datos. A continuación, llame al método ExecuteReader de SqlCommand para devolver SqlDataReader, que contiene las filas coincidentes de la consulta.

    Agregue el código siguiente al evento Page_Load del Web Form:
    	private void Page_Load(object sender, System.EventArgs e) { // Sólo se ejecuta este código la primera vez que la página se carga. // El código dentro de la instrucción IF se salta al volver a enviar la página. if (!IsPostBack) { //Crear una conexión al servidor SQL Server; modificar la cadena de conexión para el entorno //SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;Trusted_Connection=yes"); SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;UID=myUser;PWD=myPassword;");
    
    			//Crear un objeto Command y configurar la conexión. // Las siguientes instrucciones SQL comprueban si el procedimiento almacenado // GetAuthorsByLastName ya existe SqlCommand MyCommand = new SqlCommand("select * from sysobjects where id = object_id(N'GetAuthorsByLastName')" + "  and OBJECTPROPERTY(id, N'IsProcedure') = 1", MyConnection);
    
    			// Establecer el tipo de comando que ejecutará. MyCommand.CommandType = CommandType.Text;
    
    			//Abrir la conexión. MyCommand.Connection.Open();
    
    			// Ejecutar la instrucción SQL y obtener las filas devueltas para el objeto DataReader. SqlDataReader MyDataReader = MyCommand.ExecuteReader();
    
    			// Si se devuelven filas, el procedimiento almacenado que intenta // crear ya existe. Por lo tanto, hay que intentar crear el procedimiento almacenado // sólo si no existe. if(!MyDataReader.Read()) { MyCommand.CommandText = "create procedure GetAuthorsByLastName" + " (@au_lname varchar(40), select * from authors where" + " au_lname like @au_lname; select @RowCount=@@ROWCOUNT"; MyDataReader.Close(); MyCommand.ExecuteNonQuery(); } else { MyDataReader.Close(); }
    
    			MyCommand.Dispose();  //Eliminar el objeto Command. MyConnection.Close(); //Cerrar la conexión. }
    
    		// Agregar el controlador de evento al evento Button_Click. this.btnGetAuthors.Click += new System.EventHandler(this.btnGetAuthors_Click); }
    					
  4. Llame al procedimiento almacenado en el evento Click del botón btnGetAuthors y utilice el objeto SqlDataAdapter para ejecutar el procedimiento almacenado. Tiene que crear parámetros para el procedimiento almacenado y anexarlo a la colección Parameters del objeto SqlDataAdapter.

    Agregue el siguiente código después del evento Page_Load:
    	private void btnGetAuthors_Click(object sender, System.EventArgs e) { //Crear una conexión al servidor SQL Server; modificar la cadena de conexión del entorno. //SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;Trusted_Connection=yes"); SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;UID=myUser;PWD=myPassword;");
    
    		//Crear un objeto DataAdapter y proporcionar el nombre del procedimiento almacenado. SqlDataAdapter MyDataAdapter = new SqlDataAdapter("GetAuthorsByLastName", MyConnection);
    
    		//Establecer el tipo de comando como StoredProcedure. MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
    
    		//Crear y agregar un parámetro a la colección Parameters del procedimiento almacenado. MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@au_lname", SqlDbType.VarChar, 40));
    
    		//Asignar el valor de búsqueda al parámetro. MyDataAdapter.SelectCommand.Parameters["@au_lname"].Value = (txtLastName.Text).Trim();
    
    		//Crear y agregar un parámetro de salida a la colección Parameters. MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@RowCount", SqlDbType.Int, 4));
    
    		//Establecer la dirección del parámetro. Este parámetro obtiene las filas devueltas. MyDataAdapter.SelectCommand.Parameters["@RowCount"].Direction = ParameterDirection.Output;
    
    		//Crear un nuevo objeto DataSet para alojar los registros. DataSet DS = new DataSet();
    		
    		//Rellenar el DataSet con las filas devueltas. MyDataAdapter.Fill(DS, "AuthorsByLastName");
    
    		//Obtener el número de filas devueltas y asignarlo al control Label. //lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!" lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters[1].Value + " Rows Found!";
    
    		//Establecer el origen de datos para el DataGrid como el objeto DataSet que aloja las filas. GrdAuthors.DataSource = DS.Tables["AuthorsByLastName"].DefaultView;
    
    		//NOTA: si no llama a este método, el control DataGrid no se muestra. GrdAuthors.DataBind();
    
    		MyDataAdapter.Dispose(); //Eliminar el DataAdapter. MyConnection.Close(); //Cerrar la conexión. }
    					
  5. En el Explorador de soluciones, haga clic con el botón secundario del mouse en la página .aspx y, a continuación, haga clic en Establecer como página de inicio.
  6. Guarde el proyecto y, después, haga clic en Iniciar en Visual Studio .NET. Observe que el proyecto se compila y que se ejecuta la página predeterminada.
  7. Escriba los apellidos del autor en el cuadro de texto y haga clic en Obtener autores. Se llama al procedimiento almacenado y las filas devueltas llenan el control DataGrid.

    Puede proporcionar cadenas de búsqueda de tipo SQL Server como G%, que devuelve los todos los autores cuyos apellidos comienzan con la letra "G."

Solución de problemas

  • Si no puede conectar a la base de datos, asegúrese de que ConnectionString apunta correctamente al servidor que ejecuta SQL Server.
  • Si puede conectar a la base de datos, pero tiene problemas al intentar crear el procedimiento almacenado, asegúrese de que dispone de los permisos adecuados para crear procedimientos almacenados en la base de datos a la que se está conectando.

Propiedades

Id. de artículo: 320916 - Última revisión: viernes, 16 de junio de 2006 - Versión: 3.4
La información de este artículo se refiere a:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
  • Microsoft ASP.NET (included with the .NET Framework)
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
Palabras clave: 
kbhowtomaster kbsqlclient kbstoredproc kbsystemdata KB320916

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com