当前位置:   article > 正文

ServerVersion 引发了“System.InvalidOperationException”类型的异常_serverversion”引发了类型“system.invalidoperationexcepti

serverversion”引发了类型“system.invalidoperationexception”的异常

    遇到这样一个问题:添加互评信息,断点调试,跳转到BLL层后就直接跳到SqlHelper中弹出错误,说:未将对象设置引用到实例等。还请人帮忙调试代码,调试半天发现抽象工厂并没成功完成反射,奇怪的是:将出现问题的方法中换用反射其他的接口没有问题,后来将有问题的接口和DAL层类都重写了,问题好像解决了。所以添加互评就这么实现了,结果实现查询操作的时候问题重现了,我逐步调试,发现这样一个问题,调试到抽象工厂类,会发现这个问题:ServerVersion 引发了“System.InvalidOperationException”类型的异常



    如果您跟我一样使用SqlHelper了,你可以这样试着解决下问题:看一下你SqlHelper类中的方法是否正常使用了Try…Catch…,我的这个问题就是因为SqlHelper中Try…Catch…使用不正确,打开的数据库连接并没正常关闭。


出现问题的带参数sql查询语句或存储过程

 

  1. #region 执行带参数的查询SQL语句或存储过程
  2. /// <summary>
  3. /// 执行带参数的查询SQL语句或存储过程
  4. /// </summary>
  5. /// <param name="cmdText">查询SQL语句或存储过程</param>
  6. /// <param name="paras">参数集合</param>
  7. /// <param name="ct">命令类型</param>
  8. public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
  9. {
  10. try
  11. {
  12. //定义并实例化DataTable表
  13. DataTable datResult = new DataTable();
  14. //实例化SqlCommand
  15. sqlCmd = new SqlCommand(cmdText, GetConn());
  16. //传来的SqlCommand类型:存储过程、sql语句等
  17. sqlCmd.CommandType = ct;
  18. //添加参数
  19. sqlCmd.Parameters.AddRange(paras);
  20. using (sdr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection))
  21. {
  22. datResult.Load(sdr);
  23. }
  24. //返回数据表
  25. return datResult;
  26. }
  27. catch
  28. {
  29. //没有数据返回空值
  30. return null;
  31. }
  32. finally
  33. {
  34. //关闭记录集
  35. sdr.Close();
  36. //关闭数据库
  37. sqlConn.Close();
  38. }
  39. }
  40. #endregion

修改后的sql查询语句或存储过程

  1. #region 执行带参数的查询SQL语句或存储过程
  2. /// <summary>
  3. /// 执行带参数的查询SQL语句或存储过程
  4. /// </summary>
  5. /// <param name="cmdText">查询SQL语句或存储过程</param>
  6. /// <param name="paras">参数集合</param>
  7. /// <param name="ct">命令类型</param>
  8. public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
  9. {
  10. //实例化一个Datatable对象
  11. DataTable dt = new DataTable();
  12. //创建一个连接
  13. sqlCmd = new SqlCommand(cmdText, GetConn());
  14. //指定命令类型
  15. sqlCmd.CommandType = ct;
  16. //给该命令传入参数
  17. sqlCmd.Parameters.AddRange(paras);
  18. //将查询出来的记录放入dt中
  19. using (sdr = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection))
  20. {
  21. //将SqlDataReader中的记录放入dt中
  22. dt.Load(sdr);
  23. //关闭阅读器
  24. sdr.Close();
  25. }
  26. //关闭数据库连接
  27. Close();
  28. //返回DataTable
  29. return dt;
  30. }
  31. #endregion


小学问,大道理。try…catch…的作用影响很大的……


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

闽ICP备14008679号