请注意:这不是个玩笑!查了三天资料也没有想明白的一个关于数据库连接的简单问题(高分求助!!!)
简洁示意代码如下:
/// 保护方法,打开数据库连接。
/// </summary>
protected void Open()
{
if (Connection == null)
{
Connection = new SqlConnection(ConnectionString);
}
if (Connection.State.Equals(ConnectionState.Closed))
{
Connection.Open();
}
}
/// <summary>
/// 公有方法,关闭数据库连接。
/// </summary>
public void Close()
{
if (Connection != null)
Connection.Close();
}
/// <summary>
/// 公有方法,释放资源。
/// </summary>
public void Dispose()
{
// 确保连接被关闭
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
public DataSet GetDataSet(String SqlString)
{
Open();
SqlDataAdapter adapter = new SqlDataAdapter(SqlString,Connection);
DataSet dataset = new DataSet();
adapter.Fill(dataset);
Close();
return dataset;
}
问题一:
1:代开一个数据库连接时为什么不用我们平常的conn.open()方法,而是采用了判断?
if (Connection == null)
{
Connection = new SqlConnection(ConnectionString);
}
2:如果连接为空,创建一个新的连接。
if (Connection.State.Equals(ConnectionState.Closed))
{
Connection.Open();
}
3:如果连接已经关闭,那么打开一个新的连接。这样的判断有有什么好处?
4:另外会不会出现连接已经使用的情况,如果会出现,为什么上面的判断没有涉及到这里?
问题二:
public void Close()
{
if (Connection != null)
Connection.Close();
}
1:关闭连接时为什么要先判断连接不为空才关闭?
2:直接关闭不行?
问题三:释放资源部分:
public void Dispose()
{
// 确保连接被关闭
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
1:Dispose()是不是释放资源的方法?
2:为什么先判断连接不为空,再释放资源,再设置连接为空?顺序改为:不为空?设置为空-释放资源 这样可不可以。
3:确保关闭过数据库连接的情况下,还有没有必要释放资源。
4:释放资源一般用在什么情况下,是不是点击“退出”按钮时,清楚session,释放资源?有没有在其他地方用的,举个例子。
------解决方案--------------------
C# code
问题一:
1:代开一个数据库连接时为什么不用我们平常的conn.open()方法,而是采用了判断?//这样可以在使用中减少异常的发生
if (Connection == null)
{
Connection = new SqlConnection(ConnectionString);
}
2:如果连接为空,创建一个新的连接。
if (Connection.State.Equals(ConnectionState.Closed))
{
Connection.Open();
}
3:如果连接已经关闭,那么打开一个新的连接。这样的判断有有什么好处?//如果关闭了,当然要重新连接阿……
4:另外会不会出现连接已经使用的情况,如果会出现,为什么上面的判断没有涉及到这里?//代码中为:如果关闭则打开连接,如果已经打开则不作任何操作
问题二:
public void Close()
{
if (Connection != null)
Connection.Close();
}
1:关闭连接时为什么要先判断连接不为空才关闭?//因为不能确定你是在什么时候调用CLose()方法,如果你没有实例化Connection,那么你Close的时候就会产生异常
2:直接关闭不行?//见上
问题三:释放资源部分:
public void Dispose()
{
// 确保连接被关闭
if (Connection != null)
{
Connection.Dispose();
Connection = null;
}
}
1:Dispose()是不是释放资源的方法?//是的,手动释放资源
2:为什么先判断连接不为空,再释放资源,再设置连接为空?顺序改为:不为空?设置为空-释放资源 这样可不可以。//道理同CLose()方法
3:确保关闭过数据库连接的情况下,还有没有必要释放资源。//可以不必释放
4:释放资源一般用在什么情况下,是不是点击“退出”按钮时,清楚session,释放资源?有没有在其他地方用的,举个例子。//手动Dispose一般用在数据库连接,文件流等的操作。
------解决方案--------------------
C# code
public abstract class SqlHelper {
//Database connection strings
public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;
public static readonly string ConnectionStri