加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c#中如何调用带有出参入参的存储过程

(2010-04-20 14:20:48)
标签:

杂谈

分类: WinForm
我的 存储过程 (这是我自己的操作的)
USE [数据库的名字]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [dbo].[getut]
(
    @MeterID uniqueidentifier,
    @unit varchar(100) OUTPUT
)
as
BEGIN
select @unit = Meterut from MeterList
where MeterID = @MeterID
END

c#代码
 string ConnStr = string.Empty;
 ConnStr = ConfigurationManager.ConnectionStrings["XXX"].ConnectionString;
//xxx表示在web.config中配的连接串的名字
 SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConnStr);
 conn.Open();
 SqlCommand cmd = new SqlCommand("getut", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
 //cmd.Parameters.AddWithValue("@MeterID", MeterID);
 cmd.Parameters.Add("@MeterID",SqlDbType.UniqueIdentifier).Value=MeterID;
 cmd.Parameters.Add("@unit", SqlDbType.VarChar,100);
 cmd.Parameters["@MeterID"].DbType = DbType.String;
 cmd.Parameters["@MeterID"].Direction = ParameterDirection.Input;
 cmd.Parameters["@unit"].DbType = DbType.String;
 cmd.Parameters["@unit"].Direction = ParameterDirection.Output;
 cmd.ExecuteScalar();
 string result = cmd.Parameters["@unit"].Value.ToString();
 conn.Close();


上面是我自己编程时用到的,下面是转载的

今天要介绍的是在C#里如何调用带输入输出参数的存储过程,譬如实现简单的登陆功能、根据用户输入的用户名、用户密码及用户权限实现登陆。这里充当输入参数的有:用户名、用户密码、登陆权限。充当输出参数的就是在数据库里面根据输入参数的信息查询数据库中是否有记录,具体来说就是记录的行数。

  数据库中的存储过程构建代码:

  Code

1use Hotel --数据库名
2if exists(select * from sysobjects where name='proc_userinfo')--判断是否存在存储过程
3drop proc proc_userinfo --若存在删除此存储过程
4go
5--创建存储过程
6create proc proc_userinfo
7@username varchar(50),--输入参数
8@pwd varchar(50),--输入参数
9@grade varchar(20),--输入参数
10@count int output --输出参数output不能少
11--sql语句
12as
13select @count=count(*) from userinfo where username=@username and pwd=@pwd and @grade=grade
14go
15
16
17执行存储过程
18declare @n int
19exec proc_userinfo admin,123,管理员,@n output
20--output不能少
21print @n
22go


  数据访问层代码

  Code

1//调用存储过程执行类似于
2//select count(*) from userinfo where username=username and pwd=pwd and grade=grade
3//接受 3个参数分别用来表示用户名、用户密码、用户权限
4public bool GetUserinfo(string username,string pwd,string grade)
5    {
6      //获取连接字符串
7      private bool connstring = ConfigurationManager.ConnectionStrings["connstring"].Tostring;
8      int n = 0;//查询后返回的行数保存存储过程中的输出参数
9      //创建连接对象 using代码片段好处在于离开作用域后立刻从内存中释放对象
10      using (SqlConnection con=new SqlConnection(connstring))
11      {
12        con.Open();//打开数据库连接
13        using (SqlCommand cmd=new SqlCommand("proc_userinfo",con))
14        {
15          //什么作用不记得了只记得调用存储过程该语句不能少
16          cmd.CommandType = CommandType.StoredProcedure;
17          //添加存储过程输入输出参数类型及输入参数值
18          cmd.Parameters.Add("@username", SqlDbType.VarChar, 50).Value=username;
19          cmd.Parameters.Add("@pwd", SqlDbType.VarChar, 50).Value=pwd;
20          cmd.Parameters.Add("@grade", SqlDbType.VarChar, 50).Value=grade;
21          cmd.Parameters.Add("@count", SqlDbType.Int);
22          cmd.Parameters["@username"].DbType = DbType.String;
23          //指定参数类型是输入参数还是输出参数
24          cmd.Parameters["@username"].Direction = ParameterDirection.Input;
25          cmd.Parameters["@pwd"].DbType = DbType.String;
26          //指定参数类型是输入参数还是输出参数
27          cmd.Parameters["@pwd"].Direction = ParameterDirection.Input;
28          cmd.Parameters["@grade"].DbType = DbType.String;
29          //指定参数类型是输入参数还是输出参数
30          cmd.Parameters["@grade"].Direction = ParameterDirection.Input;
31          cmd.Parameters["@count"].DbType = DbType.Int32;
32          //指定参数类型是输入参数还是输出参数
33          cmd.Parameters["@count"].Direction = ParameterDirection.Output;
34          //执行存储过程 此处类似于查询语句
35          cmd.ExecuteScalar();
36          //接受执行存储过程后的返回值
37          n = (int)cmd.Parameters["@count"].Value;
38          //根据返回值判断数据库中是否存在对应用户名密码及用户权限的记录
39          if (n==1)
40          {
41            return true;
42          }
43          else
44          {
45            return false;
46          }
47        }
48      }
49    }


   至于业务逻辑层及表示层这里就不做介绍了,想必大家都知道该如何写了.

   注:这里补充点有关清空DataGradeView中所有数据de思路方法

  Code

1//用dataGradeView.DataSource dataGradeView的数据源创建一个DataTable 对象 需要强转成DataTable
2
3   DataTable dt=(DataTable )dataGradeView.DataSource; 
4 //dataGradeView为具体的dataGradeView
5
6   dt.Rows.Clean(); //删除表中的行
7
8   dataGradeView.DataSource=dt; 
9//再把dt绑定到dataGradeView上即可

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有