在C#中使用sqlClient和Odbc两种连接方法调用存储过程简述

本文包括用SqlClient和Odbc两种连接方式调用SqlServer的存储过程,这两种方式有细微的区别:

 存储过程名为‘MaxAge,包括输入参数和输出参数,输出只能人员的最大年龄。数据库为自建的test数据库,包括一个名为useName的表,字段有id(itn);name(nvarchar(10));age(int)

存储过程如下:

if Exists(select name from sysobjects where type='p' and name='MaxAge')
   drop proc MaxAge
go
create proc MaxAge
(@Name1 nvarchar(10),
 @Name2 nVarchar(10),
 @MaxAge int output)
as
select @MaxAge=Max(age) from dbo.UserName where name=@Name1 or name=@Name2



使用SqlClient调用存储过程的方法如下:

SqlConnection con = new SqlConnection("server=PC-200201070359;uid=sa;pwd=123;database=test;");
            try
            {
                con.Open();
                SqlCommand command = new SqlCommand();
                command.Connection = con;
                command.CommandType = CommandType.StoredProcedure;
                command.CommandText = "MaxAge";   //存储过程名称 

                //输入参数
                SqlParameter para = new SqlParameter("@Name1", "James");
                command.Parameters.Add(para);

                //输入参数
                para = new SqlParameter("@Name2", "Mary");
                command.Parameters.Add(para);

                //输出参数(参数名称大小写无关)
                para = new SqlParameter("@Maxage", SqlDbType.Int, 4);
                para.Direction = ParameterDirection.Output;
                command.Parameters.Add(para);

                int i = command.ExecuteNonQuery();  //执行成功返回-1

                string k = command.Parameters["@Maxage"].Value.ToString();
            }
            catch (Exception ex)
            {

                //throw;
            }

使用Odbc调用存储过程的方法如下:

OdbcConnection con = new OdbcConnection("Driver={SQL Server};server=PC-200201070359;uid=sa;pwd=123;database=test;");
            try
            {
                con.Open();
                OdbcCommand command = new OdbcCommand();
                command.Connection = con;
                command.CommandType = CommandType.StoredProcedure;
                //command.CommandText = "MaxAge";   //存储过程名称 


                command.CommandText = "{call MaxAge (?, ?,?)}";
                //输入参数
                OdbcParameter para = new OdbcParameter("@Name1", OdbcType.NVarChar, 10);
                para.Value = "James";
                command.Parameters.Add(para);

                //输入参数
                para = new OdbcParameter("@Name2", OdbcType.NVarChar, 10);
                para.Value = "Mary";
                command.Parameters.Add(para);

                //输出参数(参数名称大小写无关)
                para = new OdbcParameter("@MaxAge", OdbcType.Int, 4);
                para.Direction = ParameterDirection.Output;
                command.Parameters.Add(para);


                int i = command.ExecuteNonQuery();  //执行成功返回-1

                string k = command.Parameters["@Maxage"].Value.ToString();
            }
            catch (Exception ex)
            {

                //throw;
            }


可能遇到的问题:

使用ODBC方法,只能方法时会报这样的异常:ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]过程 'MaxAge' 需要参数 '@Name1',但未提供该参数。

解决办法:将command.CommandText = "MaxAge";   //存储过程名称 改为 command.CommandText = "{call MaxAge (?, ?,?)}";即可,目前原因未知;前面的方法在sqlclient中是可用的


原文: http://www.cnblogs.com/gossip/archive/2009/06/15/1503884.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值