首先创建存储过程,格式如下:
creat procedure sp_customersbystate @region nvarchar(15)
as
select customerid,companyname from customers
where region=@region order by companyname
return
编写程序代码:
在c#代码中,我们将使用新的类,system.data.sqlclient.parameter。该类的对象设计用于表示存储过程中的参数,因此构造函数需要知道名称、数据类型和所讨论的参数的大小。
<%@ import namespace=”system.data” %>
<%@ import namespace=”system.data.sqlclient” %>
<html>
<head><title>using stored procedures with parameters</title></head>
<body>
<form runat=”server” method=”post”>
enter a state code:
<asp:textbox id=”txtregion” runat=”server” />
<asp:button id=”btnsubmit” runat=”server”
text=”search” onclick=”submit” />
<br/><br/>
<asp:datagrid id=”dgoutput” runat=”server” />
</form>
</body>
</html>
<script language=”c#” runat=”server”>
private void submit(object sender, eventargs e)
{
string strconnection =”server=224numeca;database=northwind;user id=sa;password=sa”;
sqlconnection objconnection = new sqlconnection(strconnection);
sqlcommand objcommand = new sqlcommand(“sp_customersbystate”, objconnection);
objcommand.commandtype = commandtype.storedprocedure;
sqlparameter objparameter = new sqlparameter(“@region”, sqldbtype.nvarchar, 15);
/* 新建名为@region并声明为nvchar(15)的参数,它与存储过程中的声明相匹配。该版本的构造函数的第二个参数总是system.data.sqldbtype枚举的成员,该枚举有24个成员,表示您可能需要的所有数据类型的。*/
objcommand.parameters.add(objparameter);
/* 第二行将参数添加到命令对象的parameter集合,经常会忘记该操作 */
objparameter.direction = parameterdirection.input;
/* 设置参数对象的direction属性,以决定它是否会用于将信息传递给存储过程,或接收来自它的信息。parameterdirection.input实际上就是该属性的默认值,但是从维护和可读性的观点出发,将它放入代码中是很有帮助的。 */
objparameter.value = txtregion.text;
/* 我们将参数的value属性设置为txtregion文本框的文本属性。 */
objconnection.open();
objconnection.open();
dgoutput.datasource = objcommand.executereader();
dgoutput.databind();
objconnection.close();
}
</script>