您的位置:首页 > 数据库

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

2014-08-20 09:40 585 查看
本文包括用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息