C#中使用SQL存储过程说明

334 篇文章 1 订阅

一、表的创建sql语句:

复制代码
CREATE TABLE [tree] (
    [node_id] [
int ] NOT NULL ,
    [node_name] [varchar] (
20 ) COLLATE Chinese_PRC_CI_AS NULL ,
    [pat_id] [
int ] NULL ,
    [url] [nvarchar] (
50 ) COLLATE Chinese_PRC_CI_AS NULL ,
    [icon] [varchar] (
20 ) COLLATE Chinese_PRC_CI_AS NULL ,
    [memo] [varchar] (
30 ) COLLATE Chinese_PRC_CI_AS NULL ,
    CONSTRAINT [tree_pk] PRIMARY KEY  CLUSTERED 
    (
        [node_id]
    )  ON [PRIMARY] 
) ON [PRIMARY]
GO
复制代码

 

二、创建一个有输入、输出、返回值参数的存储过程:

复制代码
代码
     
     
create proc proc_out @uid int ,@output varchar( 200 ) output as --select结果集 select * from tree where node_id > @uid --对输出参数进行赋值 set @output = ' 记录总数: ' + convert(varchar( 10 ),(select count( * ) from tree)) --使用return,给存储过程一个返回值。 return 200 ; go
复制代码

 

三、在C#中,操作存储过程:

3.1 使用带有参数的sql语句

复制代码
代码
     
     
private void sql_param() { SqlConnection conn = new SqlConnection( " server=.;uid=sa;pwd=sa;database=sms " ); // 在sql语句当中引入了@myid参数 string sql = " select * from tree 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 .Dgd_student.DataSource = ds; this .Dgd_student.DataBind(); }
复制代码

 


3.2 存储过程的使用标准版

复制代码
代码
     
     
private void sql_proc() { SqlConnection conn = new SqlConnection( " server=.;uid=sa;pwd=sa;database=sms " ); 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 = 4 ; // 定义一个输出参数,不需赋值。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 .Dgd_student.DataSource = ds; this .Dgd_student.DataBind(); }
复制代码

 

3.3 存储过程的使用最简版:

复制代码
代码
     
     
private void sql_jyh() { // 最简写法,把存储过程当作t-sql语句来使用,语法为:exec 过程名 参数 SqlConnection conn = new SqlConnection( " server=.;uid=sa;pwd=sa;database=SMS " ); string sql = " execute proc_out 3,'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 .Dgd_student.DataSource = ds; this .Dgd_student.DataBind(); } 带多个参数 的情况 create proc proc_out2 @uid int ,@patid int ,@output varchar( 200 ) output as -- select结果集 select * from tree where node_id > @uid and pat_id = @patid -- 对输出参数进行赋值 set @output = ' 记录总数: ' + convert(varchar( 10 ),(select count( * ) from tree)) -- 使用return,给存储过程一个返回值。 return 200 ; go private void More() { SqlConnection conn = new SqlConnection( " server=.;uid=sa;pwd=sa;database=sms " ); string sql = " proc_out2 " ; SqlCommand cmd = new SqlCommand(sql, conn); // 把Command执行类型改为存储过程方式,默认为Text。 cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add( " @uid " ,SqlDbType.Int).Value = 1 ; cmd.Parameters.Add( " @patid " , SqlDbType.Int).Value = 1 ; cmd.Parameters.Add( " @output " , SqlDbType.VarChar, 100 ); cmd.Parameters[ " @output " ].Direction = ParameterDirection.Output; // cmd.Parameters.Add(new SqlParameter("@uid", SqlDbType.Int)).Value = 1; // "A1**"; // cmd.Parameters.Add(new SqlParameter("@patid", SqlDbType.Int)).Value = 1; // "A2**"; // SqlParameter param = new SqlParameter("@output", SqlDbType.VarChar, 88); // param.Direction = ParameterDirection.Output; // cmd.Parameters.Add(param); // cmd.ExecuteNonQuery(); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); string rtnstr = cmd.Parameters[ " @output " ].Value.ToString(); Response.Write( " 打印输出参数: " + rtnstr); this .Dgd_student.DataSource = ds; this .Dgd_student.DataBind(); }
复制代码

 

0
0
(请您对文章做出评价)
« 上一篇: sql存储过程简单教程
» 下一篇: SQL数据库开发中的一些精典代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值