日期:2014-05-18  浏览次数:20410 次

请注意:这不是个玩笑!查了三天资料也没有想明白的一个关于数据库连接的简单问题(高分求助!!!)
简洁示意代码如下:
/// 保护方法,打开数据库连接。
/// </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