【发布时间】:2011-12-03 21:12:05
【问题描述】:
我在这里做错了什么?
using System.Data;
using System.Data.OleDb;
namespace myProject.Account
{
public class DbManager
{
private OleDbConnection OpenDbConnection()
{
string connectionString = GetConnectionString();
return new OleDbConnection {ConnectionString = connectionString};
}
private string GetConnectionString()
{
return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\myDataBase.accdb";
}
public void InsertUser(string name, string loginName, string password)
{
OleDbConnection conn = OpenDbConnection();
OleDbCommand command = new OleDbCommand(
"INSERT INTO tblUser (UserName, LoginName, Password) VALUES (@name,@login,@pwd)",
Conn);
command.Parameters.Add("@name", OleDbType.VarChar).Value = name;
command.Parameters.Add("@login", OleDbType.VarChar).Value = loginName;
command.Parameters.Add("@pwd", OleDbType.VarChar).Value = password;
command.ExecuteNonQuery();
}
}
}
.
我收到了这个错误:
ExecuteNonQuery 需要一个开放且可用的连接。连接的当前状态为关闭。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。异常详细信息:System.InvalidOperationException:ExecuteNonQuery 需要打开且可用的连接。连接的当前状态为关闭。
来源错误:
第 31 行:command.ExecuteNonQuery();
我曾尝试查看其他一些线程,但没有任何帮助:
ExecuteNonQuery requires an open and available Connection. The connection's current state is closed
【问题讨论】:
-
我建议将连接放在
using块内以释放资源。 -
调用一个方法
OpenDbConnection对我来说似乎非常“危险”,而它实际上只创建了数据库连接,但 并没有实际上 打开 吧! Kind 违背了“最不意外原则”......要么实际上在该方法中打开连接,要么称之为CreateDbConnection或其他什么...... -
感谢 Uwe Keim - 我是 C# 的新手 对于其他对为什么使用“使用”感兴趣的人,请参阅线程:stackoverflow.com/questions/75401/uses-of-using-in-c-sharp
-
嗯.. 看来我没有正确阅读教程。当您执行“SELECT”语句时,网络上的一些示例没有使用 Conn.Open() 。我认为这只是糟糕的编程风格。所以感谢大家的帮助:-)
标签: c# oledbconnection oledbcommand