⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adohelper.cs

📁 人物传记/成功经验人物传记/成功经验人物传记/成功经验人物传记/成功经验人物传记/成功经验
💻 CS
📖 第 1 页 / 共 5 页
字号:
// ===============================================================================
// Microsoft Data Access Application Block for .NET 3.0
//
// AdoHelper.cs
//
// This file contains an abstract implementations of the AdoHelper class.
//
// For more information see the Documentation. 
// ===============================================================================
// Release history
// VERSION	DESCRIPTION
//   2.0	Added support for FillDataset, UpdateDataset and "Param" helper methods
//   3.0	New abstract class supporting the same methods using ADO.NET interfaces
//
// ===============================================================================
// Copyright (C) 2000-2001 Microsoft Corporation
// All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR
// FITNESS FOR A PARTICULAR PURPOSE.
// ==============================================================================

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Reflection;
using System.Xml;
using System.Diagnostics;

namespace SkyiSite.DB
{
	/// <summary>
	/// The AdoHelper class is intended to encapsulate high performance, scalable best practices for 
	/// common data access uses.   It uses the Abstract Factory pattern to be easily extensible
	/// to any ADO.NET provider.  The current implementation provides helpers for SQL Server, ODBC,
	/// OLEDB, and Oracle.
	/// </summary>
	public abstract class AdoHelper
	{
        public static string sqlconnection = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SkyiSiteConnectionString1"].ConnectionString;//"Provider=SQLOLEDB.1;Password=skyi;Persist Security Info=True;User ID=sa;Initial Catalog=jgsh3;Data Source=.";
		public static string oldassembly = "SkyiSite.DB";
		public static string oldtype = "SkyiSite.DB.Sql";

        #region 自定义的一些方法,方便自己使用 2009-04-06 12:11 廖朝军于南宁
        /// <summary>
        /// 采用Single模式创建实例,保证整个应用程序域只有一个实例
        /// 如果要创建数据库的其它实例,请更改AdoHelper.sqlconnection
        /// </summary>
        public static readonly AdoHelper Instance = AdoHelper.CreateHelper(AdoHelper.oldassembly, AdoHelper.oldtype);
        public virtual DataSet ExecuteDataset(string commandText)
        {
            return ExecuteDataset(AdoHelper.sqlconnection, CommandType.Text, commandText);
        }
        public virtual int ExecuteNonQuery(string commandText)
        {
            return ExecuteNonQuery(AdoHelper.sqlconnection, CommandType.Text, commandText);
        }
        protected virtual IDataReader ExecuteReader(string commandText)
        {
            return ExecuteReader(AdoHelper.sqlconnection, CommandType.Text, commandText);
        }
        public virtual object ExecuteScalar(string commandText)
        {
            return ExecuteScalar(AdoHelper.sqlconnection, CommandType.Text, commandText);
        }
        #endregion

        /// <summary>
		/// This enum is used to indicate whether the connection was provided by the caller, or created by AdoHelper, so that
		/// we can set the appropriate CommandBehavior when calling ExecuteReader()
		/// </summary>
		protected enum AdoConnectionOwnership		
		{
			/// <summary>Connection is owned and managed by ADOHelper</summary>
			Internal, 
			/// <summary>Connection is owned and managed by the caller</summary>
			External
		}

		#region Declare members
		// necessary for handling the general case of needing event handlers for RowUpdating/ed events
		/// <summary>
		/// Internal handler used for bubbling up the event to the user
		/// </summary>
		protected RowUpdatingHandler m_rowUpdating;
		/// <summary>
		/// Internal handler used for bubbling up the event to the user
		/// </summary>
		protected RowUpdatedHandler m_rowUpdated;
		#endregion

		#region Provider specific abstract methods
		/// <summary>
		/// Returns an IDbConnection object for the given connection string
		/// </summary>
		/// <param name="connectionString">The connection string to be used to create the connection</param>
		/// <returns>An IDbConnection object</returns>
		/// <exception cref="System.ArgumentNullException">Thrown if connectionString is null</exception>
		public abstract IDbConnection GetConnection( string connectionString );

		/// <summary>
		/// Returns an IDbDataAdapter object
		/// </summary>
		/// <returns>The IDbDataAdapter</returns>
		public abstract IDbDataAdapter GetDataAdapter();

		/// <summary>
		/// Calls the CommandBuilder.DeriveParameters method for the specified provider, doing any setup and cleanup necessary
		/// </summary>
		/// <param name="cmd">The IDbCommand referencing the stored procedure from which the parameter information is to be derived. The derived parameters are added to the Parameters collection of the IDbCommand. </param>
		public abstract void DeriveParameters( IDbCommand cmd );

		/// <summary>
		/// Returns an IDataParameter object
		/// </summary>
		/// <returns>The IDataParameter object</returns>
		public abstract IDataParameter GetParameter();
		
		/// <summary>
		/// Execute an IDbCommand (that returns a resultset) against the provided IDbConnection. 
		/// </summary>
		/// <example>
		/// <code>
		/// XmlReader r = helper.ExecuteXmlReader(command);
		/// </code></example>
		/// <param name="cmd">The IDbCommand to execute</param>
		/// <returns>An XmlReader containing the resultset generated by the command</returns>
		/// <exception cref="System.ArgumentNullException">Thrown if command is null.</exception>
		public abstract XmlReader ExecuteXmlReader( IDbCommand cmd );

		/// <summary>
		/// Provider specific code to set up the updating/ed event handlers used by UpdateDataset
		/// </summary>
		/// <param name="dataAdapter">DataAdapter to attach the event handlers to</param>
		/// <param name="rowUpdatingHandler">The handler to be called when a row is updating</param>
		/// <param name="rowUpdatedHandler">The handler to be called when a row is updated</param>
		protected abstract void AddUpdateEventHandlers(IDbDataAdapter dataAdapter, RowUpdatingHandler rowUpdatingHandler, RowUpdatedHandler rowUpdatedHandler);

		/// <summary>
		/// Returns an array of IDataParameters of the specified size
		/// </summary>
		/// <param name="size">size of the array</param>
		/// <returns>The array of IDataParameters</returns>
		protected abstract IDataParameter[] GetDataParameters(int size);
		//private string oledbconnection = "";
		/// <summary>
		/// Handle any provider-specific issues with BLOBs here by "washing" the IDataParameter and returning a new one that is set up appropriately for the provider.
		/// </summary>
		/// <param name="connection">The IDbConnection to use in cleansing the parameter</param>
		/// <param name="p">The parameter before cleansing</param>
		/// <returns>The parameter after it's been cleansed.</returns>
		protected abstract IDataParameter GetBlobParameter(IDbConnection connection, IDataParameter p);
		#endregion

		#region Delegates
		// also used in our general case of RowUpdating/ed events
		/// <summary>
		/// Delegate for creating a RowUpdatingEvent handler
		/// </summary>
		/// <param name="obj">The object that published the event</param>
		/// <param name="e">The RowUpdatingEventArgs for the event</param>
		public delegate void RowUpdatingHandler(object obj, RowUpdatingEventArgs e);
		/// <summary>
		/// Delegate for creating a RowUpdatedEvent handler
		/// </summary>
		/// <param name="obj">The object that published the event</param>
		/// <param name="e">The RowUpdatedEventArgs for the event</param>
		public delegate void RowUpdatedHandler(object obj, RowUpdatedEventArgs e);
		#endregion

		#region Factory
		/// <summary>
		/// Create an AdoHelper for working with a specific provider (i.e. Sql, Odbc, Sql, Oracle)
		/// </summary>
		/// <param name="providerAssembly">Assembly containing the specified helper subclass</param>
		/// <param name="providerType">Specific type of the provider</param>
		/// <returns>An AdoHelper instance of the specified type</returns>
		/// <example><code>
		/// AdoHelper helper = AdoHelper.CreateHelper("GotDotNet.ApplicationBlocks.Data", "GotDotNet.ApplicationBlocks.Data.Sql");
		/// </code></example>
		public static AdoHelper CreateHelper( string providerAssembly, string providerType )
		{
			Assembly assembly = Assembly.Load( providerAssembly );
			object provider = assembly.CreateInstance(providerType );
			if( provider is AdoHelper )
			{
				return provider as AdoHelper;
			}
			else
			{
				throw new InvalidOperationException( "The provider specified does not extend the AdoHelper abstract class." );
			}
		}


		/// <summary>
		/// Create an AdoHelper instance for working with a specific provider by using a providerAlias specified in the App.Config file.
		/// </summary>
		/// <param name="providerAlias">The alias to look up</param>
		/// <returns>An AdoHelper instance of the specified type</returns>
		/// <example><code>
		/// AdoHelper helper = AdoHelper.CreateHelper("OracleHelper");
		/// </code></example>
		public static AdoHelper CreateHelper( string providerAlias )
		{
			IDictionary dict;
			try
			{
				dict = ConfigurationSettings.GetConfig( "daabProviders" ) as IDictionary;
			}
			catch( Exception e )
			{
				throw new InvalidOperationException( "If the section is not defined on the configuration file this method can't be used to create an AdoHelper instance.", e );
			}

			ProviderAlias providerConfig = dict[ providerAlias ] as ProviderAlias;
			string providerAssembly = providerConfig.AssemblyName;
			string providerType = providerConfig.TypeName;

			Assembly assembly = Assembly.Load( providerAssembly );
			object provider = assembly.CreateInstance( providerType );
			if( provider is AdoHelper )
			{
				return provider as AdoHelper;
			}
			else
			{
				throw new InvalidOperationException( "The provider specified does not extends the AdoHelper abstract class." );
			}
		}

		#endregion

		#region GetParameter
		/// <summary>
		/// Get an IDataParameter for use in a SQL command
		/// </summary>
		/// <param name="name">The name of the parameter to create</param>
		/// <param name="value">The value of the specified parameter</param>
		/// <returns>An IDataParameter object</returns>
		public virtual IDataParameter GetParameter( string name, object value )
		{
			IDataParameter parameter = GetParameter();
			parameter.ParameterName = name;
			parameter.Value = value;

			return parameter;
		}

		/// <summary>
		/// Get an IDataParameter for use in a SQL command
		/// </summary>
		/// <param name="name">The name of the parameter to create</param>
		/// <param name="dbType">The System.Data.DbType of the parameter</param>
		/// <param name="size">The size of the parameter</param>
		/// <param name="direction">The System.Data.ParameterDirection of the parameter</param>
		/// <returns>An IDataParameter object</returns>
		public virtual IDataParameter GetParameter ( string name, DbType dbType, int size, ParameterDirection direction )
		{
			IDataParameter dataParameter = GetParameter();
			dataParameter.DbType = dbType;
			dataParameter.Direction = direction;
			dataParameter.ParameterName = name;

			if (size > 0 && dataParameter is IDbDataParameter) 
			{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -