1、获取SqlHelper.cs文件

>>可以到网上下载

>>用SqlHelper的源代码,自已创建一个.cs文件.代码如下:

SqlHelper.cs
//=================================================================================================
// This file is based on the Microsoft Data Access Application Block for .NET
// For more information please go to http://msdn.microsoft.com/library/en-us/dnbda/html/daab-rm.asp
//=================================================================================================

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Collections;

namespace ruiyi1987 //命名空间名可自定义
{

/// 〈summary〉
    /// The SqlHelper class is intended to encapsulate high performance,
    /// scalable best practices for common uses of SqlClient.
    /// 〈/summary〉
    public abstract class SqlHelper {

//Database connection strings
        public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["SQLConnString1"].ConnectionString;
        public static readonly string ConnectionStringInventoryDistributedTransaction = ConfigurationManager.ConnectionStrings["SQLConnString2"].ConnectionString;
        public static readonly string ConnectionStringOrderDistributedTransaction = ConfigurationManager.ConnectionStrings["SQLConnString3"].ConnectionString;
        public static readonly string ConnectionStringProfile = ConfigurationManager.ConnectionStrings["SQLProfileConnString"].ConnectionString;

// Hashtable to store cached parameters
        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

/// 〈summary〉
        /// Execute a SqlCommand (that returns no resultset) against the database specified in the connection string
        /// using the provided parameters.
        /// 〈/summary〉
        /// 〈remarks〉
        /// e.g.:
        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, “PublishOrders“, new SqlParameter(“@prodid“, 24));
        /// 〈/remarks〉
        /// 〈param name=“connectionString“〉a valid connection string for a SqlConnection〈/param〉
        /// 〈param name=“commandType“〉the CommandType (stored procedure, text, etc.)〈/param〉
        /// 〈param name=“commandText“〉the stored procedure name or T-SQL command〈/param〉
        /// 〈param name=“commandParameters“〉an array of SqlParamters used to execute the command〈/param〉
        /// 〈returns〉an int representing the number of rows affected by the command〈/returns〉
        public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

using (SqlConnection conn = new SqlConnection(connectionString)) {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }

/// 〈summary〉
        /// Execute a SqlCommand (that returns no resultset) against an existing database connection
        /// using the provided parameters.
        /// 〈/summary〉
        /// 〈remarks〉
        /// e.g.:
        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, “PublishOrders“, new SqlParameter(“@prodid“, 24));
        /// 〈/remarks〉
        /// 〈param name=“conn“〉an existing database connection〈/param〉
        /// 〈param name=“commandType“〉the CommandType (stored procedure, text, etc.)〈/param〉
        /// 〈param name=“commandText“〉the stored procedure name or T-SQL command〈/param〉
        /// 〈param name=“commandParameters“〉an array of SqlParamters used to execute the command〈/param〉
        /// 〈returns〉an int representing the number of rows affected by the command〈/returns〉
        public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

/// 〈summary〉
        /// Execute a SqlCommand (that returns no resultset) using an existing SQL Transaction
        /// using the provided parameters.
        /// 〈/summary〉
        /// 〈remarks〉
        /// e.g.:
        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, “PublishOrders“, new SqlParameter(“@prodid“, 24));
        /// 〈/remarks〉
        /// 〈param name=“trans“〉an existing sql transaction〈/param〉
        /// 〈param name=“commandType“〉the CommandType (stored procedure, text, etc.)〈/param〉
        /// 〈param name=“commandText“〉the stored procedure name or T-SQL command〈/param〉
        /// 〈param name=“commandParameters“〉an array of SqlParamters used to execute the command〈/param〉
        /// 〈returns〉an int representing the number of rows affected by the command〈/returns〉
        public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
            SqlCommand cmd = new SqlCommand();
            PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
            int val = cmd.ExecuteNonQuery();
            cmd.Parameters.Clear();
            return val;
        }

/// 〈summary〉
        /// Execute a SqlCommand that returns a resultset against the database specified in the connection string
        /// using the provided parameters.
        /// 〈/summary〉
        /// 〈remarks〉
        /// e.g.:
        ///  SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, “PublishOrders“, new SqlParameter(“@prodid“, 24));
        /// 〈/remarks〉
        /// 〈param name=“connectionString“〉a valid connection string for a SqlConnection〈/param〉
        /// 〈param name=“commandType“〉the CommandType (stored procedure, text, etc.)〈/param〉
        /// 〈param name=“commandText“〉the stored procedure name or T-SQL command〈/param〉
        /// 〈param name=“commandParameters“〉an array of SqlParamters used to execute the command〈/param〉
        /// 〈returns〉A SqlDataReader containing the results〈/returns〉
        public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(connectionString);

// we use a try/catch here because if the method throws an exception we want to
            // close the connection throw code, because no datareader will exist, hence the
            // commandBehaviour.CloseConnection will not work
            try {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;
            }
            catch {
                conn.Close();
                throw;
            }
        }

/// 〈summary〉
        /// Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string
        /// using the provided parameters.
        /// 〈/summary〉
        /// 〈remarks〉
        /// e.g.:
        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, “PublishOrders“, new SqlParameter(“@prodid“, 24));
        /// 〈/remarks〉
        /// 〈param name=“connectionString“〉a valid connection string for a SqlConnection〈/param〉
        /// 〈param name=“commandType“〉the CommandType (stored procedure, text, etc.)〈/param〉
        /// 〈param name=“commandText“〉the stored procedure name or T-SQL command〈/param〉
        /// 〈param name=“commandParameters“〉an array of SqlParamters used to execute the command〈/param〉
        /// 〈returns〉An object that should be converted to the expected type using Convert.To{Type}〈/returns〉
        public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
            SqlCommand cmd = new SqlCommand();

using (SqlConnection connection = new SqlConnection(connectionString)) {
                PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                object val = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return val;
            }
        }

/// 〈summary〉
        /// Execute a SqlCommand that returns the first column of the first record against an existing database connection
        /// using the provided parameters.
        /// 〈/summary〉
        /// 〈remarks〉
        /// e.g.:
        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, “PublishOrders“, new SqlParameter(“@prodid“, 24));
        /// 〈/remarks〉
        /// 〈param name=“conn“〉an existing database connection〈/param〉
        /// 〈param name=“commandType“〉the CommandType (stored procedure, text, etc.)〈/param〉
        /// 〈param name=“commandText“〉the stored procedure name or T-SQL command〈/param〉
        /// 〈param name=“commandParameters“〉an array of SqlParamters used to execute the command〈/param〉
        /// 〈returns〉An object that should be converted to the expected type using Convert.To{Type}〈/returns〉
        public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {

SqlCommand cmd = new SqlCommand();

PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
            object val = cmd.ExecuteScalar();
            cmd.Parameters.Clear();
            return val;
        }

/// 〈summary〉
        /// add parameter array to the cache
        /// 〈/summary〉
        /// 〈param name=“cacheKey“〉Key to the parameter cache〈/param〉
        /// 〈param name=“cmdParms“〉an array of SqlParamters to be cached〈/param〉
        public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters) {
            parmCache[cacheKey] = commandParameters;
        }

/// 〈summary〉
        /// Retrieve cached parameters
        /// 〈/summary〉
        /// 〈param name=“cacheKey“〉key used to lookup parameters〈/param〉
        /// 〈returns〉Cached SqlParamters array〈/returns〉
        public static SqlParameter[] GetCachedParameters(string cacheKey) {
            SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];

if (cachedParms == null)
                return null;

SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];

for (int i = 0, j = cachedParms.Length; i < j; i++)
                clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();

return clonedParms;
        }

/// 〈summary〉
        /// Prepare a command for execution
        /// 〈/summary〉
        /// 〈param name=“cmd“〉SqlCommand object〈/param〉
        /// 〈param name=“conn“〉SqlConnection object〈/param〉
        /// 〈param name=“trans“〉SqlTransaction object〈/param〉
        /// 〈param name=“cmdType“〉Cmd type e.g. stored procedure or text〈/param〉
        /// 〈param name=“cmdText“〉Command text, e.g. Select * from Products〈/param〉
        /// 〈param name=“cmdParms“〉SqlParameters to use in the command〈/param〉
        private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {

if (conn.State != ConnectionState.Open)
                conn.Open();

cmd.Connection = conn;
            cmd.CommandText = cmdText;

if (trans != null)
                cmd.Transaction = trans;

cmd.CommandType = cmdType;

if (cmdParms != null) {
                foreach (SqlParameter parm in cmdParms)
                    cmd.Parameters.Add(parm);
            }
        }
    }
}

2、将SqlHelper.cs放到App_Code文件夹下。使用时,用using+命名空间(其中命名空间名可以在源代码中自定义)引用

3、使用方法(一般都会根据实际的需要对其进行改造)

下面是在网上广为流传的SqlHelper使用指南,现附上:

您是否正在从事 .NET 应用程序数据访问代码的设计和开发?您是否觉得自己总是在反复编写相同的数据访问代码?您是否曾经将数据访问代码包装在 Helper

函数中,以便能够在一行中调用存储过程?如果是,那么 Microsoft&reg; Data Access Application Block for .NET 正是为您设计的。

Data Access Application Block 将访问 Microsoft SQL Server™ 数据库的性能和资源管理方面的最佳经验封装在一起。您可以很方便地在自己的 .NET

应用程序中将其作为构造块使用,从页减少了需要创建、测试和维护的自定义代码的数量。

尤其是,Data Access Application Block 可以帮助您:

调用存储过程或 SQL 文本命令。

指定参数详细信息。

返回 SqlDataReader、DataSet 或 XmlReader 对象。

例如,在引用了 Data Access Application Block 的应用程序中,您可以简单地在一行代码中调用存储过程并生成 DataSet,如下所示:

[Visual Basic]

Dim ds As DataSet = SqlHelper.ExecuteDataset( _

connectionString, _

CommandType.StoredProcedure, _

"getProductsByCategory", _

new SqlParameter("@CategoryID", categoryID))

[C#]

DataSet ds = SqlHelper.ExecuteDataset(

connectionString,

CommandType.StoredProcedure,

"getProductsByCategory",

new SqlParameter("@CategoryID", categoryID));

注意: Application Block for .NET(用于 .NET 的应用程序块)是基于对成功的 .NET 应用程序进行详细研究而设计的。它以源代码的形式提供,您可以原样使用,也可以针对自己的应用程序进行自定义。该应用程序块并不代表未来 Microsoft ADO.NET 程序库的发展方向。Microsoft ADO.NET 程序库是为在各种使用情况下实现对数据访问行为的精确控制而建立的。将来的 ADO.NET 版本可能会使用不同的模型来实现这个方案

SqlHelper 类提供了一组静态方法,可以用来向 SQL Server 数据库发出许多各种不同类型的命令。

SqlHelperParameterCache 类提供命令参数缓存功能,可以用来提高性能。该类由许多 Execute 方法(尤其是那些只运行存储过程的重写方法)在内部使用。数据访问客户端也可以直接使用它来缓存特定命令的特定参数集。

使用 SqlHelper 类执行命令

SqlHelper 类提供了五种 Shared (Visual Basic) 或 static (C#)

方法,它们是:ExecuteNonQuery、ExecuteDataset、ExecuteReader、ExecuteScalar 和

ExecuteXmlReader。实现的每种方法都提供一组一致的重载。这提供了一种很好的使用 SqlHelper类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。类中实现的所有方法都支持以下重载:

[Visual Basic]

Execute* (ByVal connection As SqlConnection, _

ByVal commandType As CommandType, _

ByVal CommandText As String)

Execute* (ByVal connection As SqlConnection, _

ByVal commandType As CommandType, _

ByVal commandText As String, _

ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal connection As SqlConnection, _

ByVal spName As String, _

ByVal ParamArray parameterValues() As Object)

Execute* (ByVal transaction As SqlTransaction, _

ByVal commandType As CommandType, _

ByVal commandText As String)

Execute* (ByVal transaction As SqlTransaction, _

ByVal commandType As CommandType, _

ByVal commandText As String, _

ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal transaction As SqlTransaction, _

ByVal spName As String, _

ByVal ParamArray parameterValues() As Object)

[C#]

Execute* (SqlConnection connection, CommandType commandType,

string commandText)

Execute* (SqlConnection connection, CommandType commandType,

string commandText, params SqlParameter[] commandParameters)

Execute* (SqlConnection connection, string spName,

params object[] parameterValues)

Execute* (SqlConnection connection,

CommandType commandType, string commandText)

Execute* (SqlConnection connection,

CommandType commandType, string commandText,

params SqlParameter[] commandParameters)

Execute* (SqlConnection connection,

string spName, params object[] parameterValues)

除这些重载以外,除 ExecuteXmlReader 之外的其他方法还提供了另一种重载:允许将连接信息作为连接字符串而不是连接对象来传递,如下面的方法签名所示:

[Visual Basic]

Execute* (ByVal connectionString As String, _

ByVal commandType As CommandType, _

ByVal commandText As String)

Execute* (ByVal connectionString As String, _

ByVal commandType As CommandType, _

ByVal commandText As String, _

ByVal ParamArray commandParameters() As SqlParameter)

Execute* (ByVal connectionString As String, _

ByVal spName As String, _

ByVal ParamArray parameterValues() As Object)

[C#]

Execute* (string connectionString, CommandType commandType,

string commandText)

Execute* (string connectionString, CommandType commandType,

string commandText,

params SqlParameter[] commandParameters)

Execute* (string connectionString, string spName,

params object[] parameterValues)

注意: ExecuteXmlReader 不支持连接字符串,因为:与 SqlDataReader 对象不同,XmlReader 对象在 XmlReader

关闭时没有提供自动关闭连接的方法。如果客户端传递了连接字符串,那么当客户端完成对 XmlReader 的操作后,将无法关闭与 XmlReader

相关联的连接对象。

通过参考 Data Access Application Block 程序集并导入 Microsoft.ApplicationBlocks.Data

命名空间,您可以轻松编写使用任何一种 SqlHelper 类方法的代码,如下面的代码示例所示:

[Visual Basic]

Imports Microsoft.ApplicationBlocks.Data

[C#]

using Microsoft.ApplicationBlocks.Data;

导入命名空间后,您可以调用任何 Execute* 方法,如下面的代码示例所示:

[Visual Basic]

Dim ds As DataSet = SqlHelper.ExecuteDataset( _

"SERVER=(local);DATABASE=Northwind;INTEGRATED SECURITY=True;",

_

CommandType.Text, "SELECT * FROM Products")

[C#]

DataSet ds = SqlHelper.ExecuteDataset(

"SERVER=DataServer;DATABASE=Northwind;INTEGRATED

SECURITY=sspi;", _

CommandType.Text, "SELECT * FROM Products");

使用 SqlHelperParameterCache 类管理参数

SqlHelperParameterCache 类提供了三种可以用来管理参数的公共共享方法。它们是:

CacheParameterSet。用于将 SqlParameters 数组存储到缓存中。

GetCachedParameterSet。用于检索缓存的参数数组的副本。

GetSpParameterSet。一种重载方法,用于检索指定存储过程的相应参数(首先查询一次数据库,然后缓存结果以便将来查询)。

缓存和检索参数

通过使用 CacheParameterSet 方法,可以缓存 SqlParameter

对象数组。此方法通过将连接字符串和命令文本连接起来创建一个键,然后将参数数组存储在 Hashtable 中。

要从缓存中检索参数,请使用 GetCachedParameterSet 方法。此方法将返回一个 SqlParameter

对象数组,这些对象已使用缓存(与传递给该方法的连接字符串和命令文本相对应)中的参数的名称、值、方向和数据类型等进行了初始化。

注意: 用作参数集的键的连接字符串通过简单的字符串比较进行匹配。用于从 GetCachedParameterSet 中检索参数的连接字符串必须与用来通过

CacheParameterSet 来存储这些参数的连接字符串完全相同。语法不同的连接字符串即使语义相同,也不会被认为是匹配的。

以下代码显示了如何使用 SqlHelperParameterCache 类来缓存和检索 Transact-SQL 语句的参数。

[Visual Basic]

' 初始化连接字符串和命令文本

' 它们将构成用来存储和检索参数的键

Const CONN_STRING As String = _

"SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"

Dim sql As String = _

"SELECT ProductName FROM Products " + _

"WHERE Category=@Cat AND SupplierID = @Sup"

' 缓存参数

Dim paramsToStore(1) As SqlParameter

paramsToStore(0) = New SqlParameter("@Cat", SqlDbType.Int)

paramsToStore(1) = New SqlParameter("@Sup", SqlDbType.Int)

SqlHelperParameterCache.CacheParameterSet(CONN_STRING, _

sql, _

paramsToStore)

' 从缓存中检索参数

Dim storedParams(1) As SqlParameter

storedParams = SqlHelperParameterCache.GetCachedParameterSet( _

CONN_STRING, sql)

storedParams(0).Value = 2

storedParams(1).Value = 3

' 在命令中使用参数

Dim ds As DataSet

ds = SqlHelper.ExecuteDataset(CONN_STRING, _

CommandType.Text, _

sql, storedParams)

[C#]

// 初始化连接字符串和命令文本

// 它们将构成用来存储和检索参数的键

const string CONN_STRING =

"SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;";

string spName = "SELECT ProductName FROM Products " +

"WHERE Category=@Cat AND SupplierID = @Sup";

// 缓存参数

SqlParameter[] paramsToStore = new SqlParameter[2];

paramsToStore[0] = New SqlParameter("@Cat", SqlDbType.Int);

paramsToStore[1] = New SqlParameter("@Sup", SqlDbType.Int);

SqlHelperParameterCache.CacheParameterSet(CONN_STRING,

sql,

paramsToStore);

// 从缓存中检索参数

SqlParameter storedParams = new SqlParameter[2];

storedParams = SqlHelperParameterCache.GetCachedParameterSet(

CONN_STRING, sql);

storedParams(0).Value = 2;

storedParams(1).Value = 3;

// 在命令中使用参数

DataSet ds;

ds = SqlHelper.ExecuteDataset(CONN_STRING,

CommandType.StoredProcedure,

sql, storedParams);

检索存储过程参数

SqlHelperParameterCache 还提供了针对特定存储过程检索参数数组的方法。一种名为 GetSpParameterSet

的重载方法提供了此功能,它包含两种实现。该方法尝试从缓存中检索特定存储过程的参数。如果这些参数尚未被缓存,则使用 .NET 的

SqlCommandBuilder

类从内部检索,并将它们添加到缓存中,以便用于后续的检索请求。然后,为每个参数指定相应的参数设置,最后将这些参数以数组形式返回给客户端。以下代码显示了如何检索

Northwind 数据库中 SalesByCategory 存储过程的参数。

[Visual Basic]

' 初始化连接字符串和命令文本

' 它们将构成用来存储和检索参数的键

Const CONN_STRING As String = _

"SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"

Dim spName As String = "SalesByCategory"

' 检索参数

Dim storedParams(1) As SqlParameter

storedParams = SqlHelperParameterCache.GetSpParameterSet( _

CONN_STRING, spName)

storedParams(0).Value = "Beverages"

storedParams(1).Value = "1997"

' 在命令中使用参数

Dim ds As DataSet

ds = SqlHelper.ExecuteDataset(CONN_STRING, _

CommandType.StoredProcedure, _

spName, storedParams)

[C#]

// 初始化连接字符串和命令文本

// 它们将构成用来存储和检索参数的键

const string CONN_STRING =

"SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;";

string spName = "SalesByCategory";

// 检索参数

SqlParameter storedParams = new SqlParameter[2];

storedParams = SqlHelperParameterCache.GetSpParameterSet(

CONN_STRING, spName);

storedParams[0].Value = "Beverages";

storedParams[1].Value = "1997";

// 在命令中使用参数

DataSet ds;

ds = SqlHelper.ExecuteDataset(CONN_STRING,

CommandType.StoredProcedure,

spName, storedParams);

内部设计

Data Access Application Block 包含了完整的源代码和有关其设计的综合指南。本节介绍有关主要实现的详细信息。

SqlHelper 类实现详细信息

SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。

在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper

类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。在

SqlHelper 类中实现的方法包括:

ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。

ExecuteDataset。此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。

ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。

ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。

除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过

SqlCommand 对象来执行。在 SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置

Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper

类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper

类中的专用实用程序函数包括:

AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand。

AssignParameterValues:该函数用于为 SqlParameter 对象赋值。

PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。

ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开 SqlDataReader

对象,以便最有效地管理与阅读器关联的连接的有效期。

SqlHelperParameterCache 类实现详细信息

参数数组缓存在专用 Hashtable

中。从缓存中检索的参数进行内部复制,这样客户端应用程序能够更改参数值以及进行其他操作,而不会影响缓存的参数数组。专用共享函数 CloneParameters

可以实现此目的。

常见问题

此版本包含哪些新增功能?

与 Data Access Application Block Beta 2.0 版本相比,该 RTM 版本包含以下新增功能和变化:

SqlHelper 类方法的事务型重载不再需要 SqlConnection 参数。在此版本中,连接信息从 SqlTransaction

对象中派生,因此不必在方法签名中包含 SqlConnection 对象参数。

现在,GetSpParameterSet 方法使用 ADO.NET CommandBuilder 类的 DeriveParameters

方法来确定存储过程所需要的参数。这比 Beta 2.0 版本中直接通过查询数据库来检索信息的效率更高。

可以使用 XCOPY 部署方法来部署 Data Access Application Block 程序集吗?

可以。Microsoft.ApplicationBlocks.Data.dll 程序集在编译后可以使用 XCOPY 进行部署。

什么时候应该使用 ExecuteDataset 方法,什么时候应该使用 ExecuteReader 方法?

这个问题实际上是什么时候应该返回 DataSet 对象中的多个数据行,什么时候应该使用

DataReader。答案取决于您的应用程序的特定需要,以及您在灵活性和原始性能之间的取舍。DataSet 为您提供数据的灵活的且断开连接的关系视图,而

DataReader 为您提供性能卓越的、只读的、仅向前光标。有关 DataSet 和 DataReader 的全面比较,请参阅 Data Access

Architecture Guide(英文)。

如何使用 ExecuteDataset 返回包含多个表的数据集?

通过创建一个可以返回多个行集的存储过程(通过执行多个 SELECT 语句或者对其他存储过程进行嵌套调用),并使用 ExecuteDataset

方法执行该过程,您可以检索包含多个表的数据集。

例如,假设您的数据库包含以下存储过程。

CREATE PROCEDURE GetCategories

AS

SELECT * FROM Categories

GO

CREATE PROCEDURE GetProducts

AS

SELECT * FROM Products

您可以创建一个主存储过程来对这些过程进行嵌套调用,如下面的代码示例所示。

CREATE PROCEDURE GetCategoriesAndProducts

AS

BEGIN

EXEC GetCategories

EXEC GetProducts

END

使用 ExecuteDataset 方法执行此主存储过程将返回一个 DateSet,其中包含两个表:一个表包含分类数据,另一个表包含产品数据。

注意: ExecuteDataset 方法不提供为返回的表指定自定义名称的方法。第一个表的编号始终为 0,名称为 Table,第二个表的编号为 1,名称为

Table1,依此类推.

转载于:https://www.cnblogs.com/ruiyi1987/archive/2009/03/26/1422213.html

SqlHelper全攻略相关推荐

  1. 组策略分发软件全攻略

    组策略分发软件全攻略 在规模比较大的网络环境里面,为了对服务器和客户机上的软件.系统补丁进行集中统一的管理,我们可能会用到SUS.WSUS.SMS等.SUS.WSUS管理系统更新,不在本文讨论,请参考 ...

  2. 根据16S预测微生物群落功能最全攻略

    文章原文转载自"宏基因组"公众号,由于微信图片不支持外部网站访问.请点击原文链接跳转公众号阅读. 根据16S预测微生物群落功能最全攻略

  3. chrome 插件开发各种功能demo_Chrome 插件开发全攻略

    Chrome 浏览器相信大家都用得比较多,有很多的优点,比如简洁.强大的开发者工具等,但是更让大家映像深刻的是有各种各样有趣.有用的插件,今天要给大家推荐的开源项目是 Chrome 插件开发全攻略,你 ...

  4. MySQL与优化有关的命令_MySQL优化全攻略-相关数据库命令

    MySQL优化全攻略-相关数据库命令 更新时间:2006年11月25日 00:00:00   作者: 接下来我们要讨论的是数据库性能优化的另一方面,即运用数据库服务器内建的工具辅助性能分析和优化. ▲ ...

  5. Retrofit全攻略——进阶篇

    最近事比较多,距离上次写文章已经过去了一个月了.上一篇文章Retrofit全攻略--基础篇 介绍了Retrofit的基础用法,这篇文章介绍点进阶的用法. 打印网络日志 在开发阶段,为了方便调试,我们需 ...

  6. nagios全攻略(三)----使用插件监控更多信息

    三. 使用命令和插件监控更多信息<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office&quo ...

  7. [RHEL5企业级Linux服务攻略]--第3季 DHCP服务全攻略

    1 DHCP原理  1.1 DHCP概述 DHCP(Dynamic Host Configuration Protocal)就是动态主机配置协议哈,可以自动配置主机的IP地址.子网掩码.网关及DNS等 ...

  8. EqualLogic全攻略视频[(一)介绍]

    制片人: 戴尔中国大客户部高级市场经理 Andy Peng 彭宇恒 演讲者: 戴尔亚太区存储技术总监 Alvin Kho 许良谋 戴尔中国高级系统工程师 English Li 李英文 EqualLog ...

  9. c盘怎么扩容_给电脑减压,C盘清理全攻略!

    本文共1839字,预计阅读时间6分钟相信很多小伙伴发现,电脑没用一段时间就会速度变得很慢,轻则影响学习工作效率,重则电脑卡死,做到一半的工作前功尽弃,让人分分钟想要砸电脑,那这个时候呢,你就要检查一下 ...

最新文章

  1. 学习笔记-express路径问题
  2. linux下file命令使用技巧
  3. html5图片长按保存,一文彻底解决HTML5页面中长按保存图片功能
  4. 最全python爬虫库安装详解
  5. mysql int(3)_MySQL中int(11)与int(3)的区别_MySQL
  6. 抢火车票,出行必备程序(12306bypass)--可以抛掉同程什么的抢票软件了
  7. Dynamics CRM 365 - 零基础入门学习后端插件的注册方法
  8. BDB 入门篇 第6章 A DPL Example一个DPL 例子
  9. Instagram第三方接入
  10. 计算机二级真题期刊论文模板,论文格式?二级标题是什么?
  11. MiniGPT4,开源了
  12. graylog2 实践
  13. 【校招VIP】产品经理之明确活动目的
  14. 分支和循环语句---循环语句
  15. 北邮计算机学院国家示范,北京邮电大学获批2020年国家自然科学基金81项
  16. ARM-9 4412板、linux-3.14内核、usb转串口pl2303驱动的移植相关问题
  17. 2018中国区块链百强企业第一弹 | 链塔智库
  18. 云顶之弈5.26服务器维护,云顶之弈手游维护 更新内容一览
  19. PBX俗称:程控交换机
  20. react快速框架dva搭建项目架构

热门文章

  1. php算出明天的日期,PHP获取昨天、今天及明天日期的方法
  2. 小甲鱼c++源码_飞凌课堂丨OK1046A-C内存交互测试,小白也能看懂
  3. python删除类方法_python中向类中动态添加新特性及删除属性方法
  4. c++语言中如何写入文件,C++:在多线程程序中写入文件
  5. java frame paint_一个简单的java frame画图(paint)问题
  6. 记录一下CUDNN配置
  7. python发送微信消息_用python批量发送微信消息
  8. 阿里JAVA面试题剖析:一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?...
  9. 最先进数据中心都建在哪?
  10. BurpSuite日志分析过滤工具,加快SqlMap进行批量扫描的速度