C#操作Access报ExecuteNonQuery: Connection property has not been initialized错误如何解决
问题根因
- 错误的核心是创建可释放资源的方法内部误用了
using语句:using语句会在离开当前代码作用域时自动调用对象的Dispose方法销毁资源,你需要返回给外层使用的连接、命令对象在方法返回时就已经被释放,自然会触发连接属性未初始化的异常。openConnection方法中给OleDbConnection对象加了using,方法执行完毕返回conn的瞬间,连接就被自动关闭释放,外层Command方法拿到的是无效的销毁对象getCommand方法中给OleDbCommand对象加了using,方法返回cmd的瞬间,命令对象就被释放,内部绑定的连接属性也被清空,执行ExecuteNonQuery时检测不到有效连接
修复代码
你外层Command方法已经给conn和cmd加上了using,执行完毕会自动释放资源,不需要在创建对象的内部方法里重复加using,修改两个工具方法即可:
// 修复openConnection,去掉内部using private OleDbConnection openConnection() { var conn= new OleDbConnection(connString); conn.Open(); return conn; } // 修复getCommand,去掉内部using private OleDbCommand getCommand(string queryString, OleDbConnection conn) { var cmd = new OleDbCommand(queryString, conn); return cmd; }
内容的提问来源于stack exchange,提问作者galidan
相关产品推荐
相关产品推荐

