Este artigo demonstra como utilizar o ASP.NET e ADO.NET com o Visual C# .NET para criar e contactar um Microsoft SQL Server armazenadas procedimento com um parâmetro de entrada e um parâmetro de saída.
O código de exemplo neste artigo verifica primeiro se o procedimento armazenado vai criar existe na base de dados
pubs , que é fornecido com uma instalação padrão do Microsoft SQL Server. Se o procedimento armazenado não existir, o código cria um procedimento armazenado que assume um parâmetro para procurar a tabela de
autores , com base no nome do último e devolve o número de linhas retornadas num parâmetro de saída e linhas correspondentes.
Este artigo também demonstra como criar um formulário da Web que fornece uma interface de utilizador simples. O formulário da Web contém os seguintes itens:
- Uma caixa de texto no qual o utilizador escreve a condição de procura.
- Um controlo DataGrid que apresente os resultados da procura.
- Controlo de etiqueta que apresenta o número de registos devolvidos.
- Um controlo de botão que chame o procedimento armazenado quando o botão é clicado.
Requisitos
A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs são necessários:
- Microsoft SQL Server versão 7.0 ou posterior
- Microsoft Visual Studio .NET
- Microsoft Visual C# .NET
- Permissões para criar o procedimento armazenado na base de dados
Este artigo pressupõe que está familiarizado com os seguintes tópicos:
- ASP.NET
- Procedimentos armazenados do SQL Server
Criar um projecto do ASP.NET e adicionar controlos
Nesta secção, pode criar um projecto ASP.NET e cria a interface de utilizador básica. Tenha em atenção que estes passos utilizam o Microsoft Visual C# .NET código. Para criar o projecto, siga estes passos:
- Clique em Iniciar , aponte para programas , aponte para Microsoft Visual Studio .NET e, em seguida, clique em Microsoft Visual Studio. NET .
- Na página Iniciar do Visual Studio .NET, clique em Novo projecto .
- Na caixa de diálogo Novo projecto , clique em Visual C# Projects em Project Types e, em seguida, clique em ASP.NET Web Application em modelos .
- Na caixa nome , escreva um nome para a aplicação Web e, em seguida, clique em OK .
- Adicione os seguintes controlos de servidor para o formulário da Web e definir as propriedades são listados na tabela:
Reduzir esta tabelaExpandir esta tabela
| Controlo | ID de propriedade | Propriedades de texto |
|---|
| etiqueta | lblLastName | Escreva o nome apelido do autor: |
| caixa de texto | txtLastName | % |
| botão | btnGetAuthors | Obter autores |
| etiqueta | lblRowCount | (Número de linha) |
- Arraste um controlo de servidor DataGrid da caixa de ferramentas ao formulário da Web e, em seguida, defina a propriedade Nome como GrdAuthors .
- Clique com o botão direito do rato na grelha e, em seguida, clique em formatação automática .
- Clique Professional 1 para o esquema e, em seguida, clique em OK .
Criar o GetAuthorsByLastName procedimento armazenado
Utilize o seguinte código Transact-SQL para criar o procedimento armazenado 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 returns the number of rows that are affected by the last statement. */
select @RowCount=@@ROWCOUNT
este código inclui dois parâmetros: @ at_nome e @ RowCount. O parâmetro @ at_nome é um parâmetro de entrada que obtém a cadeia de procura para efectuar uma procura de "como" na tabela
autores . O parâmetro @ RowCount é um parâmetro de saída que utiliza a variável @@ ROWCOUNT para obter as linhas afectadas.
Criar e executar o procedimento armazenado
Para aceder a bases de dados do SQL Server, terá de importar o espaço de nomes
System.data.SqlClient , que fornece novos objectos, tais como
SqlDataReader e os objectos
SqlDataAdapter . Pode utilizar
SqlDataReader ler uma sequência só de reencaminhamento de linhas a partir de uma base de dados do SQL Server.
' DataAdapter ' representa um conjunto de comandos de dados e uma ligação de base de dados que pode utilizar para preencher o objecto de
DataSet e para actualizar uma base de dados do SQL Server.
ADO.NET também apresenta o objecto
DataSet , que é uma representação residente em memória dos dados que fornece um modelo consistente e relacional programação independentemente da origem de dados. O código nesta secção utiliza todos estes objectos.
- Faça duplo clique no formulário da Web.
- Adicione o seguinte código (as directivas utilizando ) à secção do seu formulário da Web, que aparece na parte superior da janela Code declaração:
using System.Data;
using System.Data.SqlClient;
- Para se certificar de que existe o procedimento armazenado e para criar um novo procedimento armazenado, utilize um objecto SqlCommand com um objecto SqlDataReader . Pode utilizar SqlCommand para executar quaisquer comandos SQL em relação à base de dados. Em seguida, chame o método ExecuteReader de SqlCommand para devolver SqlDataReader , que contém linhas correspondentes para a consulta.
Adicione o seguinte código no evento Page_Load do formulário Web:
private void Page_Load(object sender, System.EventArgs e)
{
// Only run this code the first time the page is loaded.
// The code inside the IF statement is skipped when you resubmit the page.
if (!IsPostBack)
{
//Create a connection to the SQL Server; modify the connection string for your environment
//SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;Trusted_Connection=yes");
SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;UID=myUser;PWD=myPassword;");
// Create a Command object, and then set the connection.
// The following SQL statements check whether a GetAuthorsByLastName
// stored procedure already exists.
SqlCommand MyCommand = new SqlCommand("select * from sysobjects where id = object_id(N'GetAuthorsByLastName')" +
" and OBJECTPROPERTY(id, N'IsProcedure') = 1", MyConnection);
// Set the command type that you will run.
MyCommand.CommandType = CommandType.Text;
// Open the connection.
MyCommand.Connection.Open();
// Run the SQL statement, and then get the returned rows to the DataReader.
SqlDataReader MyDataReader = MyCommand.ExecuteReader();
// If any rows are returned, the stored procedure that you are trying
// to create already exists. Therefore, try to create the stored procedure
// only if it does not exist.
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(); //Dispose of the Command object.
MyConnection.Close(); //Close the connection.
}
// Add the event handler to the Button_Click event.
this.btnGetAuthors.Click += new System.EventHandler(this.btnGetAuthors_Click);
}
- Contacte o procedimento armazenado no evento Click do botão btnGetAuthors e, em seguida, utilizar o objecto SqlDataAdapter para executar o procedimento armazenado. Tem de criar parâmetros para o procedimento armazenado e anexá-la à colecção de parâmetros do objecto SqlDataAdapter .
Adicione o seguinte código depois do evento Page_Load :
private void btnGetAuthors_Click(object sender, System.EventArgs e)
{
//Create a connection to the SQL Server; modify the connection string for your environment.
//SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;Trusted_Connection=yes");
SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;UID=myUser;PWD=myPassword;");
//Create a DataAdapter, and then provide the name of the stored procedure.
SqlDataAdapter MyDataAdapter = new SqlDataAdapter("GetAuthorsByLastName", MyConnection);
//Set the command type as StoredProcedure.
MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
//Create and add a parameter to Parameters collection for the stored procedure.
MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@au_lname", SqlDbType.VarChar, 40));
//Assign the search value to the parameter.
MyDataAdapter.SelectCommand.Parameters["@au_lname"].Value = (txtLastName.Text).Trim();
//Create and add an output parameter to the Parameters collection.
MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@RowCount", SqlDbType.Int, 4));
//Set the direction for the parameter. This parameter returns the Rows that are returned.
MyDataAdapter.SelectCommand.Parameters["@RowCount"].Direction = ParameterDirection.Output;
//Create a new DataSet to hold the records.
DataSet DS = new DataSet();
//Fill the DataSet with the rows that are returned.
MyDataAdapter.Fill(DS, "AuthorsByLastName");
//Get the number of rows returned, and assign it to the Label control.
//lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!"
lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters[1].Value + " Rows Found!";
//Set the data source for the DataGrid as the DataSet that holds the rows.
GrdAuthors.DataSource = DS.Tables["AuthorsByLastName"].DefaultView;
//NOTE: If you do not call this method, the DataGrid is not displayed!
GrdAuthors.DataBind();
MyDataAdapter.Dispose(); //Dispose the DataAdapter.
MyConnection.Close(); //Close the connection.
}
- No Solution Explorer, clique com o botão direito do rato na página .aspx e, em seguida, clique em Definir como página inicial .
- Guardar o projecto e, em seguida, clique em Iniciar no Visual Studio. NET. Repare que o projecto compilado e que a página predefinida é executada.
- Escreva o apelido do autor na caixa de texto e, em seguida, clique em Obter autor . Repare que chama o procedimento armazenado e as linhas devolvidas preencher DataGrid .
Pode fornecer busca de tipo de servidor SQL como a conta % , que devolve todos os autores por apelidos que começam com a letra "G."
Resolução de problemas
- Se não conseguir ligar à base de dados, certifique-se de que ConnectionString correctamente aponta para o servidor que está a executar o SQL Server.
- Se pode ligar à base de dados, mas se tiver problemas quando tentar criar o procedimento armazenado, certifique-se de que tem as permissões correctas para criar procedimentos armazenados na base de dados ao qual está a ligar.
Artigo: 320916 - Última revisão: sexta-feira, 5 de Dezembro de 2003 - Revisão: 3.3
A informação contida neste artigo aplica-se 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
| kbmt kbhowtomaster kbsqlclient kbstoredproc kbsystemdata KB320916 KbMtpt |
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo:
320916
(http://support.microsoft.com/kb/320916/en-us/
)