当前位置:   article > 正文

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

c# odbc 调用存储过程

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

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

存储过程如下:

  1. if Exists(select name from sysobjects where type='p' and name='MaxAge')
  2. drop proc MaxAge
  3. go
  4. create proc MaxAge
  5. (@Name1 nvarchar(10),
  6. @Name2 nVarchar(10),
  7. @MaxAge int output)
  8. as
  9. select @MaxAge=Max(age) from dbo.UserName where name=@Name1 or name=@Name2



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

  1. SqlConnection con = new SqlConnection("server=PC-200201070359;uid=sa;pwd=123;database=test;");
  2. try
  3. {
  4. con.Open();
  5. SqlCommand command = new SqlCommand();
  6. command.Connection = con;
  7. command.CommandType = CommandType.StoredProcedure;
  8. command.CommandText = "MaxAge"; //存储过程名称
  9. //输入参数
  10. SqlParameter para = new SqlParameter("@Name1", "James");
  11. command.Parameters.Add(para);
  12. //输入参数
  13. para = new SqlParameter("@Name2", "Mary");
  14. command.Parameters.Add(para);
  15. //输出参数(参数名称大小写无关)
  16. para = new SqlParameter("@Maxage", SqlDbType.Int, 4);
  17. para.Direction = ParameterDirection.Output;
  18. command.Parameters.Add(para);
  19. int i = command.ExecuteNonQuery(); //执行成功返回-1
  20. string k = command.Parameters["@Maxage"].Value.ToString();
  21. }
  22. catch (Exception ex)
  23. {
  24. //throw;
  25. }

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

  1. OdbcConnection con = new OdbcConnection("Driver={SQL Server};server=PC-200201070359;uid=sa;pwd=123;database=test;");
  2. try
  3. {
  4. con.Open();
  5. OdbcCommand command = new OdbcCommand();
  6. command.Connection = con;
  7. command.CommandType = CommandType.StoredProcedure;
  8. //command.CommandText = "MaxAge"; //存储过程名称
  9. command.CommandText = "{call MaxAge (?, ?,?)}";
  10. //输入参数
  11. OdbcParameter para = new OdbcParameter("@Name1", OdbcType.NVarChar, 10);
  12. para.Value = "James";
  13. command.Parameters.Add(para);
  14. //输入参数
  15. para = new OdbcParameter("@Name2", OdbcType.NVarChar, 10);
  16. para.Value = "Mary";
  17. command.Parameters.Add(para);
  18. //输出参数(参数名称大小写无关)
  19. para = new OdbcParameter("@MaxAge", OdbcType.Int, 4);
  20. para.Direction = ParameterDirection.Output;
  21. command.Parameters.Add(para);
  22. int i = command.ExecuteNonQuery(); //执行成功返回-1
  23. string k = command.Parameters["@Maxage"].Value.ToString();
  24. }
  25. catch (Exception ex)
  26. {
  27. //throw;
  28. }


可能遇到的问题:

使用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


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/705890
推荐阅读
相关标签
  

闽ICP备14008679号