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

📄 commandbuilder.cs

📁 抽象工厂的典型实现
💻 CS
字号:
using System;
using System.Data;
using System.Data.Common;
using System.ComponentModel;
using System.Collections;

#region 版权声明
///
/// 版权所有(C)2005,2006  作者:漆巧林。保留所有权利, davidqql@gmail.com, davidqql@hotmail.com
/// 
/// 作者不对本代码提供任何保证,因此,对于使用该代码带来的损害或者潜在的损害,作者不承担责任。
/// 在满足如下的条件下,你可以自由使用该代码:
/// 1. 非商业应用
/// 2. 保留本版权声明
/// 要进行商业应用,必须得到作者的书面许可。
/// 你可以修改和自由发布本代码,条件是保留前述的版权声明。
/// 
#endregion

namespace DataAccess
{
	/// <summary>
	/// ICommandBuilder : 命令生成器的公共接口,用来解决各种数据库不兼容的CommandBuilder类型。
	/// </summary>
	public abstract class DbCommandBuilder : System.ComponentModel.Component
	{
		/// <summary>
		/// 获取或者设置CommandBuilder的适配器
		/// </summary>
		public abstract IDbDataAdapter DataAdapter { get; set; }
		/// <summary>
		/// 获取或设置开始字符,这些字符在使用名称中包含空格或保留标记等字符的数据库对象(例如,表或列)时使用。
		/// </summary>
		public abstract string QuotePrefix { set; get; }
		/// <summary>
		/// 获取或设置结束字符,这些字符在使用名称中包含空格或保留标记等字符的数据库对象(例如,表或列)时使用。
		/// </summary>
		public abstract string QuoteSuffix { set; get; }

		/// <summary>
		/// 从在 command 中指定的存储过程中检索参数信息并填充指定的 command 对象的 Parameters 集合。
		/// </summary>
		/// <param name="command"></param>
		public abstract void DeriveParameters(IDbCommand command);
		/// <summary>
		/// 获取在数据源中执行删除操作所需的自动生成的 IDbCommand 接口
		/// </summary>
		/// <returns>自动生成的、执行删除操作所需的IDbCommand接口</returns>
		public abstract IDbCommand GetDeleteCommand();
		/// <summary>
		/// 获取在数据源中执行插入操作所需的自动生成的 IDbCommand 接口。
		/// </summary>
		/// <returns>自动生成的、执行插入操作所需的 IDbCommand 接口</returns>
		public abstract IDbCommand GetInsertCommand();
		/// <summary>
		/// 获取在数据源中执行更新操作所需的自动生成的 IDbCommand 接口。
		/// </summary>
		/// <returns>自动生成的、执行更新操作所需的 IDbCommand 接口</returns>
		public abstract IDbCommand GetUpdateCommand();
		/// <summary>
		/// 刷新用于生成 INSERT、UPDATE 或 DELETE 语句的数据库架构信息。
		/// </summary>
		public abstract void RefreshSchema();

	}

	/// <summary>
	/// SqlCommandBuilder : 对System.Data.SqlClient.SqlCommandBuilder的封装
	/// </summary>
	internal sealed class SqlCommandBuilder : DbCommandBuilder
	{
		private System.Data.SqlClient.SqlCommandBuilder builder;

		internal SqlCommandBuilder()
		{
			builder = new System.Data.SqlClient.SqlCommandBuilder();
		}

		internal SqlCommandBuilder(IDbDataAdapter adapter)
		{
			builder = new System.Data.SqlClient.SqlCommandBuilder((System.Data.SqlClient.SqlDataAdapter)adapter);
		}

		public override IDbDataAdapter DataAdapter
		{
			get
			{
				return builder.DataAdapter;
			}
			set
			{
				builder.DataAdapter = (System.Data.SqlClient.SqlDataAdapter)value;
			}
		}

		public override void DeriveParameters(IDbCommand command)
		{
			System.Data.SqlClient.SqlCommandBuilder.DeriveParameters((System.Data.SqlClient.SqlCommand)command);
		}

		public override IDbCommand GetDeleteCommand()
		{
			return builder.GetDeleteCommand();
		}

		public override IDbCommand GetInsertCommand()
		{
			return builder.GetInsertCommand();
		}

		public override IDbCommand GetUpdateCommand()
		{
			return builder.GetUpdateCommand();
		}

		public override string QuotePrefix
		{
			get
			{
				return builder.QuotePrefix;
			}
			set
			{
				builder.QuotePrefix = value;
			}
		}

		public override string QuoteSuffix
		{
			get
			{
				return builder.QuoteSuffix;
			}
			set
			{
				builder.QuoteSuffix = value;
			}
		}

		public override void RefreshSchema()
		{
			builder.RefreshSchema();
		}
	}

	/// <summary>
	/// OdbcCommandBuilder: System.Data.Odbc.OdbcCommandBuilder的封装类
	/// </summary>
	internal sealed class OdbcCommandBuilder : DbCommandBuilder
	{
		private System.Data.Odbc.OdbcCommandBuilder builder;

		internal OdbcCommandBuilder()
		{
			builder = new System.Data.Odbc.OdbcCommandBuilder();
		}

		internal OdbcCommandBuilder(IDbDataAdapter adapter)
		{
			builder = new System.Data.Odbc.OdbcCommandBuilder((System.Data.Odbc.OdbcDataAdapter)adapter);
		}

		public override IDbDataAdapter DataAdapter
		{
			get
			{
				return builder.DataAdapter;
			}
			set
			{
				builder.DataAdapter = (System.Data.Odbc.OdbcDataAdapter)value;
			}
		}

		public override void DeriveParameters(IDbCommand command)
		{
			System.Data.Odbc.OdbcCommandBuilder.DeriveParameters((System.Data.Odbc.OdbcCommand)command);
		}

		public override IDbCommand GetDeleteCommand()
		{
			return builder.GetDeleteCommand();
		}

		public override IDbCommand GetInsertCommand()
		{
			return builder.GetInsertCommand();
		}

		public override IDbCommand GetUpdateCommand()
		{
			return builder.GetUpdateCommand();
		}

		public override string QuotePrefix
		{
			get
			{
				return builder.QuotePrefix;
			}
			set
			{
				builder.QuotePrefix = value;
			}
		}

		public override string QuoteSuffix
		{
			get
			{
				return builder.QuoteSuffix;
			}
			set
			{
				builder.QuoteSuffix = value;
			}
		}

		public override void RefreshSchema()
		{
			builder.RefreshSchema();
		}
	}

	/// <summary>
	/// OleDbCommandBuilder: System.Data.OleDb.OleDbCommandBuilder的封装类
	/// </summary>
	internal sealed class OleDbCommandBuilder : DbCommandBuilder
	{
		private System.Data.OleDb.OleDbCommandBuilder builder;

		internal OleDbCommandBuilder()
		{
			builder = new System.Data.OleDb.OleDbCommandBuilder();
		}

		internal OleDbCommandBuilder(IDbDataAdapter adapter)
		{
			builder = new System.Data.OleDb.OleDbCommandBuilder((System.Data.OleDb.OleDbDataAdapter)adapter);
		}

		public override IDbDataAdapter DataAdapter
		{
			get
			{
				return builder.DataAdapter;
			}
			set
			{
				builder.DataAdapter = (System.Data.OleDb.OleDbDataAdapter)value;
			}
		}

		public override void DeriveParameters(IDbCommand command)
		{
			System.Data.OleDb.OleDbCommandBuilder.DeriveParameters((System.Data.OleDb.OleDbCommand)command);
		}

		public override IDbCommand GetDeleteCommand()
		{
			return builder.GetDeleteCommand();
		}

		public override IDbCommand GetInsertCommand()
		{
			return builder.GetInsertCommand();
		}

		public override IDbCommand GetUpdateCommand()
		{
			return builder.GetUpdateCommand();
		}

		public override string QuotePrefix
		{
			get
			{
				return builder.QuotePrefix;
			}
			set
			{
				builder.QuotePrefix = value;
			}
		}

		public override string QuoteSuffix
		{
			get
			{
				return builder.QuoteSuffix;
			}
			set
			{
				builder.QuoteSuffix = value;
			}
		}

		public override void RefreshSchema()
		{
			builder.RefreshSchema();
		}
	}

	/// <summary>
	/// OracleCommandBuilder: System.Data.OracleClient.OracleCommandBuilder的封装类
	/// </summary>
	internal sealed class OracleCommandBuilder : DbCommandBuilder
	{
		private System.Data.OracleClient.OracleCommandBuilder builder;

		internal OracleCommandBuilder()
		{
			builder = new System.Data.OracleClient.OracleCommandBuilder();
		}

		internal OracleCommandBuilder(IDbDataAdapter adapter)
		{
			builder = new System.Data.OracleClient.OracleCommandBuilder((System.Data.OracleClient.OracleDataAdapter)adapter);
		}

		public override IDbDataAdapter DataAdapter
		{
			get
			{
				return builder.DataAdapter;
			}
			set
			{
				builder.DataAdapter = (System.Data.OracleClient.OracleDataAdapter)value;
			}
		}

		public override void DeriveParameters(IDbCommand command)
		{
			System.Data.OracleClient.OracleCommandBuilder.DeriveParameters((System.Data.OracleClient.OracleCommand)command);
		}

		public override IDbCommand GetDeleteCommand()
		{
			return builder.GetDeleteCommand();
		}

		public override IDbCommand GetInsertCommand()
		{
			return builder.GetInsertCommand();
		}

		public override IDbCommand GetUpdateCommand()
		{
			return builder.GetUpdateCommand();
		}

		public override string QuotePrefix
		{
			get
			{
				return builder.QuotePrefix;
			}
			set
			{
				builder.QuotePrefix = value;
			}
		}

		public override string QuoteSuffix
		{
			get
			{
				return builder.QuoteSuffix;
			}
			set
			{
				builder.QuoteSuffix = value;
			}
		}

		public override void RefreshSchema()
		{
			builder.RefreshSchema();
		}
	}

	/// <summary>
	/// NpgsqlCommandBuilder: 对于Npgsql.NpgsqlCommandBuilder封装
	/// </summary>
	internal sealed class NpgsqlCommandBuilder : DbCommandBuilder
	{
		private Npgsql.NpgsqlCommandBuilder builder;

		internal NpgsqlCommandBuilder()
		{
			builder = new Npgsql.NpgsqlCommandBuilder();
		}
		internal NpgsqlCommandBuilder(IDbDataAdapter adapter)
		{
			builder = new Npgsql.NpgsqlCommandBuilder((Npgsql.NpgsqlDataAdapter)adapter);
		}

		public override IDbDataAdapter DataAdapter
		{
			get
			{
				return builder.DataAdapter;
			}
			set
			{
				builder.DataAdapter = (Npgsql.NpgsqlDataAdapter)value;
			}
		}

		public override void DeriveParameters(IDbCommand command)
		{
			Npgsql.NpgsqlCommandBuilder.DeriveParameters((Npgsql.NpgsqlCommand)command);
		}

		public override IDbCommand GetDeleteCommand()
		{
			return builder.GetDeleteCommand(null);
		}

		public override IDbCommand GetInsertCommand()
		{
			return builder.GetInsertCommand(null);
		}

		public override IDbCommand GetUpdateCommand()
		{
			return builder.GetUpdateCommand(null);
		}

		public override string QuotePrefix
		{
			get
			{
				return builder.QuotePrefix;
			}
			set
			{
				builder.QuotePrefix = value;
			}
		}

		public override string QuoteSuffix
		{
			get
			{
				return builder.QuoteSuffix;
			}
			set
			{
				builder.QuoteSuffix = value;
			}
		}

		public override void RefreshSchema()
		{
			builder.RefreshSchema();
		}

	}
}

⌨️ 快捷键说明

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