Stu*_*art 1 c# asp.net sqlconnection properties
我正试图用一个Using()声明SqlConnection.
我已经制作了这样SqlConnection的页面属性......
public SqlConnection baseConnection
{
get { return new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); }
}
Run Code Online (Sandbox Code Playgroud)
然后创建了using()这样的声明......
using (baseConnection)
{
SqlCommand select = new SqlCommand("SELECT * FROM TABLE", baseConnection);
baseConnection.Open();
SqlDataReader reader = select.ExecuteReader();
//... other irrelevant code
}
Run Code Online (Sandbox Code Playgroud)
但是当代码运行时,我得到一个例外
异常详细信息:System.InvalidOperationException:ExecuteReader需要打开且可用的连接.连接的当前状态已关闭
我理解异常,我不明白,为什么我打开它时连接没有打开baseConnection.Open()?
我在整个站点使用此连接,并且我想将它作为页面属性放在自定义基类中,因此我不必继续键入它.这是不允许的?
我在你的例子中找到的问题
每次请求baseConnection属性时,都会获得新的SqlConnection对象
有问题的代码:
public SqlConnection baseConnection
{
get { return new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); }
}
Run Code Online (Sandbox Code Playgroud)
更正代码
private SqlConnection _baseConnection;
public SqlConnection BaseConnection
{
get { return _baseConnection = _baseConnection ?? new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); }
}
Run Code Online (Sandbox Code Playgroud)
这里return _baseConnection = _baseConnection ?? new SqlConnection()使用来自C#的Null Coaleasing运算符,??即如果_baseConnection变量为null ,它将创建新实例.
My Assumptions
BaseConnection属性在某些中定义,BaseClass派生类在子派生类中不会进一步扩展.这样,每个派生类类型都会使用一个SqlConnection.