在。net中调用存储过程的方法(转)
以SQL Server自带的Authors数据库给你详解一下如何在ASP.Net使用存储过程:
1、创建一个SQL存储过程,其中包含要执行的语句。
2、导入System.Data命名空间。
3、把存储过程名称传递给SqlCommand类的实例。
4、把SqlCommand类的CommandType属性设置为CommandType.StoredProcedure值。
其中第一步实际上就是创建SQL存储过程。可以使用Microsoft SQL Server企业管理器(Enterprise
Manager)或查询分析器(Query Analyzer)来创建存储过程。比如,可以使用查询分析器。
要运行Query Analyzer,则点击“开始”->“程序”->“Microsoft SQL Server”,然后点击“查询
分析器”,并从下拉列表框中选择需要在其中创建存储过程的数据库。
接着,在查询分析器的查询窗口中输入如下语句:
Create Procedure InsertProducts
(
@produectName Nvarchar(80)
@UnitPrice Money
)
As
Insert Produects (ProduectName, UnitPrice)
Values(@ProductName, @UnitPrice)
在输入上述语句后,点击“Execute Query”按钮来执行语句并创建一个名为InsertProduects的新存
储过程。
InsertProducts存储过程具有两个输入参数,名为@ProductName和@UnitPirece。@ProductName参数
定义为NVartchar类型,其最大长度为80个字符。@UnitPrice参数定义为Money类型。
存储过程的主体定义在As关键字后面。InsertProducts存储过程使用两个参数简单地执行SQL Insert
语句。
以下面这段程序执行InsertProducts存储过程:
<%@ Page Language="C#"%>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<script runat=server>
void Page_Load(Object sender , EventArgs e)
{
SqlConnection conNorthwind;
string strInsert;
SqlCommand cmdInsert;
conNorthwind = new SqlConnection( @"Server=localhost;Integrated
Security=SSPI;database=Northwind" );
cmdInsert = new SqlCommand( "InsertProducts", conNorthwind );
cmdInsert.CommandType = CommandType.StoredProcedure;
cmdInsert.Parameters.Add( "@ProductName", "Milk" );
cmdInsert.Parameters.Add( "@UnitPrice", 12.45 );
conNorthwind.Open();
cmdInsert.ExecuteNonQuery();
conNorthwind.Close();
Response.Write("New Product Added!");
}
</script>
首先,注意在页面中第二行代码是导入System.Data命名空间。导入System.Data命名空间的目的是为
了随后在页面中使用CommandType枚举类型。
接着,在初始化SqlCommand类时,传递了存储过程名称InsertProduct。当执行此命令时,就会执行
该存储过程。
最后,把SqlCommand类的CommandType属性设为CommandType.StoredProcedure值。设置CommandType
是为了让命令解析作为存储过程名称解析,而不是作为标准的SQL语句来解析(CommandType的默认值是
Text)。
也可以在执行SQL Select语句和DataReader查询时使用存储过程。其操作步骤一样。比如,程序页面
显示Authors数据库表中所有记录的au_lname列的值。
如下程序执行查询时使用存储过程:
<%@ Page Language="C#"%>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<script runat=server>
void Page_Load(Object sender , EventArgs e)
{
SqlConnection conPubs;
SqlCommand cmdSelect;
SqlDataReader dtrAuthors;
conPubs = new SqlConnection( @"Server=localhost;Integrated
Security=SSPI;database=pubs" );
cmdSelect = new SqlCommand( "SelectAuthors", conPubs );
cmdSelect.CommandType = CommandType.StoredProcedure;
conPubs.Open();
dtrAuthors = cmdSelect.ExecuteReader();
while ( dtrAuthors.Read()) {
Response.Write( "<li>" );
Response.Write( dtrAuthors[ "au_lname" ] );
}
dtrAuthors.Close();
conPubs.Close();
}
</script>
程序页面执行了一个名为SelectAuthors的存储过程。该存储过程是在调用ExecuteReader()方法时执行。
这个SelectAuthors存储过程不带任何参数。它只是简单地返回Authors数据表中的所有作者的姓。
SelectAuthors存储过程可以由如下语句创建:
Create Procedure SelectAuthors
As
Select au_lname From Authors