当前位置:中国站长下载文章中心网页编程.NET编程 → 最佳实践 ADO.NET实用经验无保留曝光(6)

最佳实践 ADO.NET实用经验无保留曝光(6)

减小字体 增大字体 作者:不详  来源:不详  发布时间:2006-8-14 8:42:53
     使用连接
  
    高性能应用程序与使用中的数据源保持最短时间的连接,并且利用性能增强技术,例如连接池。下面的主题提供一些技巧,有助于在使用ADO.NET连接到数据源时获得更好的性能。
  
    连接池
  
    用于ODBC的SQL Server、OLE DB和.NET框架数据提供程序隐式缓冲连接。通过在连接字符串中指定不同的属性值,可以控制连接池的行为。
  
    用DataAdapter优化连接
  
    DataAdapter的Fill和Update方法在连接关闭的情况下自动打开为相关命令属性指定的连接。如果Fill或Update方法打开了连接,Fill或Update将在操作完成的时候关闭它。为了获得最佳性能,仅在需要时将与数据库的连接保持为打开。同时,减少打开和关闭多操作连接的次数。
  
    如果只执行单个的Fill或Update方法调用,建议允许Fill或Update方法隐式打开和关闭连接。如果对Fill和Update调用有很多,建议显式打开连接,调用Fill和Update,然后显式关闭连接。
  
    另外,当执行事务时,显式地在开始事务之前打开连接,并在提交之后关闭连接。例如:
  
  'Visual Basic
  Public Sub RunSqlTransaction(da As SqlDataAdapter, myConnection As SqlConnection, ds As DataSet)
  myConnection.Open()
  Dim myTrans As SqlTransaction = myConnection.BeginTransaction()
  myCommand.Transaction = myTrans
  
  Try
  da.Update(ds)
  myTrans.Commit()
  Console.WriteLine("Update successful.")
  Catch e As Exception
  Try
  myTrans.Rollback()
  Catch ex As SqlException
  If Not myTrans.Connection Is Nothing Then
  Console.WriteLine("An exception of type " & ex.GetType().ToString() & " was encountered while attempting to roll back the transaction.")
  End If
  End Try
  
  Console.WriteLine("An exception of type " & e.GetType().ToString() & " was encountered.")
  Console.WriteLine("Update failed.")
  End Try
  myConnection.Close()
  End Sub
  
  //C#
  public void RunSqlTransaction(SqlDataAdapter da, SqlConnection myConnection, DataSet ds)
  {
  myConnection.Open();
  SqlTransaction myTrans = myConnection.BeginTransaction();
  myCommand.Transaction = myTrans;
  
  try
  {
  da.Update(ds);
  myCommand.Transaction.Commit();
  Console.WriteLine("Update successful.");
  }
  catch(Exception e)
  {
  try
  {
  myTrans.Rollback();
  }
  catch (SqlException ex)
  {
  if (myTrans.Connection != null)
  {
  Console.WriteLine("An exception of type " + ex.GetType() +" was encountered while attempting to roll back the transaction.");
  }
  }
  
  Console.WriteLine(e.ToString());
  Console.WriteLine("Update failed.");
  }
  myConnection.Close();
  }
    做人要厚道,请注明转自chinazhan中国站长(www.ChinaZhan.com)。