执行ADO测试程序相关使用说明

开发 后端
但是没有想到在Sybase ASE ADO.NET中竟然要求操作AseCommand的Parameters时要求数据库操持连接。

原来在Sql Server及Oracle上操作时,执行完成后直接把连接关闭了。返回的参数想怎么处理就怎么处理,并不会出错,注意使用COM交互操作访问ADO的数据将极大的降低性能。

不知道这里有多少人用Sybase做数据库开发的,我是有点受不了了。用了ADO测试程序,冲破重重阻力,终于系统算是正常运行了,要做更进一步的处理:增加数据权限。我们原来是在Sql Server上用函数直接返回的结果集来判断的。#t#

但是Sybase不支持函数,只好用存储过程返回一个判断权限的条件字符串动态执行。问题是取出输出参数总提提示“Command has been closed”。奇怪啊,明明执行的时候是Open了Connection了。写了一个ADO测试程序

  1.  AseConnection con = new AseConnection("Data Source='SYBASE'Port=5000UID='sa'PWD=''Database='data';Connection Timeout='300';") ;   
  2. AseCommand com = new AseCommand("GetDataRightSQL", con) ;   
  3. com.CommandType = System.Data.CommandType.StoredProcedure ;   
  4. try   
  5. {   
  6. AseParameter prm = new AseParameter("@UserID", 1) ;   
  7. //prm.Direction = System.Data.ParameterDirection.Input ;   
  8. com.Parameters.Add(prm) ;   
  9. prm = new AseParameter("@Category","Department") ;   
  10. com.Parameters.Add(prm) ;   
  11. com.Parameters.Add(new AseParameter("@FieldName", "Dept_ID")) ;   
  12. prm = new AseParameter("@returnSql", AseDbType.VarChar, 250) ;   
  13. prm.Direction = System.Data.ParameterDirection.Output ;   
  14. com.Parameters.Add(prm) ;   
  15. con.Open() ;   
  16. com.ExecuteNonQuery() ;   
  17. Console.WriteLine(com.Parameters["@returnSql"].Value) ;  

由于是我们有一个数据层专门处理数据库操作,开始怀疑封装的不好了。检查了N次也不知道在哪出错,ADO测试程序总以为是输出参数类型有问题,试过几次,长度也改过。不行。
后来注意到:跟踪执行的时候执行成功,总是在取参数的时候出错。

再看一下错误信息“Command has been closed”,晕!ADO测试程序不会是取参数值的时候要求数据库连接保持Open状态吧? 修改一下测试代码:

  1. AseParameter prm = new AseParameter("@UserID", 1) ;   
  2. //   prm.Direction = System.Data.ParameterDirection.Input ;   
  3. com.Parameters.Add(prm) ;   
  4. prm = new AseParameter("@Category","Department") ;   
  5. com.Parameters.Add(prm) ;   
  6. com.Parameters.Add(new AseParameter("@FieldName", "Dept_ID")) ;   
  7. prm = new AseParameter("@returnSql", AseDbType.VarChar, 250) ;   
  8. prm.Direction = System.Data.ParameterDirection.Output ;   
  9. com.Parameters.Add(prm) ;   
  10. con.Open() ;   
  11. com.ExecuteNonQuery() ;   
  12. con.Close() ; //提前关闭数据库   
  13. Console.WriteLine(com.Parameters["@returnSql"].Value) ;  
责任编辑:chenqingxiang 来源: 计世网
相关推荐

2009-12-29 14:28:58

ADO数据

2010-01-04 16:54:22

ADO分页

2009-12-23 09:14:52

ADO.NET连接池

2009-12-31 09:42:41

ADO对象模型

2009-12-25 17:01:21

ADO参数

2009-12-18 14:20:26

ADO.NET组件

2009-12-21 14:55:49

ADO.NET对象

2009-12-18 15:11:50

ADO.NET类

2009-12-22 10:43:48

ADO.NET类库

2009-12-18 13:52:39

ADO.NET设计器

2009-12-25 18:12:43

WPF装饰器

2009-12-18 17:06:37

ADO.NET 数据库

2009-12-23 14:53:28

ADO.NET连接池

2009-12-24 09:14:52

ADO.Net Tea

2009-12-28 11:23:38

WPF资源文件

2009-12-25 15:57:14

ADO调用

2009-12-23 15:13:15

Ado.Net Syb

2009-12-21 16:07:52

ADO.NET数据库

2009-12-23 13:23:29

ADO.Net Sql

2009-12-22 16:03:34

ADO.NET Ent
点赞
收藏

51CTO技术栈公众号