create proc p_test
@name varchar(20),
@rowcount int output
as
begin
select * from t_customer where [email protected]
set @[email protected]@rowcount
end
go
----------------------------------------------------------------------------------------
--存儲過程調用如下:
----------------------------------------------------------------------------------------
declare @i int
exec p_test 'a',@i output
select @i
--結果
/*
name address tel
---------- ---------- --------------------
a address telphone
(所影響的行數為 1 行)
-----------
1
(所影響的行數為 1 行)
*/
----------------------------------------------------------------------------------------
--dotnet 部分(c#)
--webconfig 文件:
----------------------------------------------------------------------------------------
......
</system.web>
<!-- 數據庫連接字符串
-->
<appsettings>
<add key="connectstring" value="server=(local);user id=sa;password=;database=test" />
</appsettings>
</configuration>
----------------------------------------------------------------------------------------
--c#代碼:(用到兩個測試控件,datagrid1(用于顯示綁定結果集合),lable(用于顯示存儲過程返回單值)
----------------------------------------------------------------------------------------
//添加數據庫引用
using system.data.sqlclient;
......
private void page_load(object sender, system.eventargs e)
{
// 在此處放置用戶代碼以初始化頁面
string dbconnstr;
dataset mydataset=new dataset();
system.data.sqlclient.sqldataadapter dataadapter=new system.data.sqlclient.sqldataadapter();
dbconnstr=system.configuration.configurationsettings.appsettings["connectstring"];
system.data.sqlclient.sqlconnection myconnection = new system.data.sqlclient.sqlconnection(dbconnstr);
if (myconnection.state!=connectionstate.open)
{
myconnection.open();
}
system.data.sqlclient.sqlcommand mycommand = new system.data.sqlclient.sqlcommand("p_test",myconnection);
mycommand.commandtype=commandtype.storedprocedure;
//添加輸入查詢參數、賦予值
mycommand.parameters.add("@name",sqldbtype.varchar);
mycommand.parameters["@name"].value ="a";
//添加輸出參數
mycommand.parameters.add("@rowcount",sqldbtype.int);
mycommand.parameters["@rowcount"].direction=parameterdirection.output;
mycommand.executenonquery();
dataadapter.selectcommand = mycommand;
if (mydataset!=null)
{
dataadapter.fill(mydataset,"table");
}
datagrid1.datasource=mydataset;
datagrid1.databind();
//得到存儲過程輸出參數
label1.text=mycommand.parameters["@rowcount"].value.tostring();
if (myconnection.state == connectionstate.open)
{
myconnection.close();
}
}
----------------------------------------------------------------------------------------
運行以上代碼即可(返回記錄集合和存儲過程返回值)
新聞熱點
疑難解答