当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  使用ADO.NET的最佳实践 7

 使用ADO.NET的最佳实践 7

点击次数:34 次 发布日期:2008-11-26 11:18:43 作者:源代码网
源代码网推荐      显式指定架构和元数据
源代码网推荐  
源代码网推荐    只要用户没有指定元数据信息,ADO.NET的许多对象就会推断元数据信息。下面是一些示例:
源代码网推荐  
源代码网推荐    1) DataAdapter.Fill方法,如果DataSet中没有表和列,DataAdapter.Fill方法会在DataSet中创建表和列。
源代码网推荐  
源代码网推荐    2) CommandBuilder,它会为单表SELECT命令生成DataAdapter命令属性。
源代码网推荐  
源代码网推荐    3) CommandBuilder.DeriveParameters,它会填充Command对象的Parameters集合。
源代码网推荐  
源代码网推荐    但是,每次用到这些特性,都会有性能损失。建议将这些特性主要用于设计时和即席应用程序中。在可能的情况下,显式指定架构和元数据。其中包括在 DataSet中定义表和列、定义DataAdapter的Command属性、以及为Command定义Parameter信息。
源代码网推荐  
源代码网推荐    ExecuteScalar和ExecuteNonQuery
源代码网推荐  
源代码网推荐    如果想返回像Count(*)、Sum(Price)或Avg(Quantity)的结果那样的单值,可以使用 Command.ExecuteScalar。ExecuteScalar返回第一行第一列的值,将结果集作为标量值返回。因为单独一步就能完成,所以 ExecuteScalar不仅简化了代码,还提高了性能;要是使用DataReader就需要两步才能完成(即,ExecuteReader+取值)。
源代码网推荐  
源代码网推荐    使用不返回行的SQL语句时,例如修改数据(例如INSERT、UPDATE或DELETE)或仅返回输出参数或返回值,请使用ExecuteNonQuery。这避免了用于创建空DataReader的任何不必要处理。
源代码网推荐  
源代码网推荐    测试Null
源代码网推荐  
源代码网推荐    如果表(在数据库中)中的列允许为空,就不能测试参数值是否“等于”空。相反,需要写一个WHERE子句,测试列和参数是否都为空。下面的SQL语句返回一些行,它们的LastName列等于赋给@LastName参数的值,或者LastName列和@LastName参数都为空。
源代码网推荐  
源代码网推荐  SELECT * FROM Customers
源代码网推荐  WHERE ((LastName = @LastName) OR (LastName IS NULL AND @LastName IS NULL))
源代码网推荐  
源代码网推荐    将Null作为参数值传递
源代码网推荐  
源代码网推荐    对数据库的命令中,当将空值作为参数值发送时,不能使用null(Visual Basic .net中为Nothing)。而需要使用DBNull.Value。例如:
源代码网推荐  
源代码网推荐  "Visual Basic
源代码网推荐  Dim param As SqlParameter = New SqlParameter("@Name", SqlDbType.NVarChar, 20)
源代码网推荐  param.Value = DBNull.Value
源代码网推荐  
源代码网推荐  //C#
源代码网推荐  SqlParameter param = new SqlParameter("@Name", SqlDbType.NVarChar, 20);
源代码网推荐  param.Value = DBNull.Value;
源代码网推荐  
源代码网推荐    执行事务
源代码网推荐  
源代码网推荐    ADO.NET的事务模型已经更改。在ADO中,当调用StartTransaction时,调用之后的任何更新操作都被视为是事务的一部分。但是,在 ADO.NET中,当调用Connection .BeginTransaction时,会返回一个Transaction对象,需要将它与Command的Transaction属性联系起来。这种设计可以在一个单一连接上执行多个根事务。如果未将Command.Transaction属性设置为一个针对相关的Connection而启动的 Transaction,那么Command就会失败并引发异常。
源代码网推荐  
源代码网推荐    即将发布的.NET框架将使您可以在现有的分布式事务中手动登记。这对于对象池方案来说很理想;在该方案中,一个池对象打开一次连接,但是在多个独立的事务中都涉及到该对象。.NET框架1.0发行版中这一功能并不可用。
源代码网推荐  
源代码网推荐    使用连接
源代码网推荐  
源代码网推荐    高性能应用程序与使用中的数据源保持最短时间的连接,并且利用性能增强技术,例如连接池。下面的主题提供一些技巧,有助于在使用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();
源代码网推荐  }
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华