要在C#中使用預存程序,首先看看test表的建立sql語句:
create table test55 ( uid int identity(1,1), class1 varchar(20), class2 varchar(20), uname varchar(20), birth smalldatetime, meno varchar(50) ) alter table test55 add constraint primary_id primary key(uid)
|
建立一個有輸入、輸出、傳回值參數的預存程序:
create proc proc_out @uid int,@output varchar(200) output
as
--select結果集
select * from test where uid>@uid
--對輸出參數進行賦值
set @output='記錄總數:'+convert(varchar(10),(select count(*) from test))
--使用return,給預存程序一個傳回值。
return 200;
go
在C#中使用預存程序:
使用帶有參數的sql語句
private void sql_param() { SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=1234;database=china"); //在sql語句當中引入了@myid參數
string sql="select * from test where uid>@myid"; SqlCommand comm=new SqlCommand(sql,conn); //使用comm的Parameters屬性的add方法,對上述的@myid參數進行定義和賦值
//SqlDbType類提供了與SqlServer資料類型一致的資料庫類型
SqlParameter sp=comm.Parameters.Add("@myid",SqlDbType.Int); sp.Value=10;//對輸入參數賦值
//Command對象預設的執行方式為Text,不寫下句亦可
comm.CommandType=CommandType.Text; //將Command對象作為DataAdapter的參數傳進
SqlDataAdapter da=new SqlDataAdapter(comm); DataSet ds=new DataSet(); da.Fill(ds); //綁定資料到DataGrid1控制項上
this.DataGrid1.DataSource=ds; this.DataGrid1.DataBind(); }
|
預存程序的使用標準版
private void sql_proc() { SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=1234;database=china"); string sql="proc_out"; SqlCommand comm=new SqlCommand(sql,conn); //把Command執行類型改為預存程序方式,預設為Text。
comm.CommandType=CommandType.StoredProcedure; //傳遞一個輸入參數,需賦值
SqlParameter sp=comm.Parameters.Add("@uid",SqlDbType.Int); sp.Value=10; //定義一個輸出參數,不需賦值。Direction用來描述參數的類型
//Direction預設為輸入參數,還有輸出參數和傳回值型。
sp=comm.Parameters.Add("@output",SqlDbType.VarChar,50); sp.Direction=ParameterDirection.Output; //定義過程的傳回值參數,過程執行完之後,將把過程的傳回值賦值給名為myreturn的Paremeters賦值。
sp=comm.Parameters.Add("myreturn",SqlDbType.Int); sp.Direction=ParameterDirection.ReturnValue; //使用SqlDataAdapter將自動完成資料庫的開啟和關閉過程,並執行相應t-sql語句或預存程序
//如果預存程序只是執行相關操作,如串聯刪除或更新,使用SqlCommand的execute方法即可。
SqlDataAdapter da=new SqlDataAdapter(comm); DataSet ds=new DataSet(); da.Fill(ds); //在執行完預存程序之後,可得到輸出參數
string myout=comm.Parameters["@output"].Value.ToString(); //列印輸出參數:
Response.Write("列印輸出參數:"+myout); //列印預存程序傳回值
myout=comm.Parameters["myreturn"].Value.ToString(); Response.Write("預存程序傳回值:"+myout); this.DataGrid1.DataSource=ds; this.DataGrid1.DataBind(); }
|
預存程序的使用最簡版:
private void sql_jyh() { //最簡寫法,把預存程序當作t-sql語句來使用,文法為:exec 過程名 參數
SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=1234;database=china"); string sql="execute proc_out 10,'12'"; SqlCommand comm=new SqlCommand(sql,conn); //使用SqlDataAdapter將自動完成資料庫的開啟和關閉過程,並執行相應t-sql語句或預存程序
//如果預存程序只是執行相關操作,如串聯刪除或更新,使用SqlCommand的execute方法即可。
SqlDataAdapter da=new SqlDataAdapter(comm); DataSet ds=new DataSet(); da.Fill(ds); //綁定資料
this.DataGrid1.DataSource=ds; this.DataGrid1.DataBind(); }
|