赞
踩
本文包括用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;
- }
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。