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

📄 datapanelmanager.cs

📁 一个通用的数据库访问层
💻 CS
字号:
using System;
using System.Data;
using System.Data.OleDb;
using System.Collections;
using System.Windows.Forms;
using YariSoft.DBUtil;

namespace YariSoft.DBCommander
{
	public enum DetailLevel{
		DBLevel = 0,
		TableLevel ,
		DataLevel	
	}
	public class DataPanelManager
	{
		#region Local variables
		private OleDbConnection connecton			= null;
		private SchemaGenerator schema				= null;
		private Stack			dataManagers		= null;
		private bool			_identityOff		= false;

		#endregion

		#region Properties
		public OleDbConnection Connection
		{
			get{ return this.connecton; }
		}

		public string ServerCaption
		{
			get{ 
				string result = this.connecton.DataSource + "." + this.connecton.Database + ". ";
				if( result.Length > 30 ){
					result = result.Substring( 0, 27 ) + "...";
				}
				return result; 
			}
		}

		public YariSoft.DBCommander.DetailLevel DetailLevel 
		{
			get { return ( YariSoft.DBCommander.DetailLevel )this.dataManagers.Count; }
		}

		public bool NeedRefresh
		{
			get { 
					IManager curManager = (IManager)this.dataManagers.Peek();
					return curManager.NeedRefresh;
				}
		}
		
		public bool IdentityOff
		{
			get{ return this._identityOff; }
			set{ this._identityOff = value; }
		}

		#endregion

		#region Constructor/Destructor
		public DataPanelManager( string ConnectionString )
		{
			this.connecton		= new OleDbConnection( ConnectionString );
			this.schema			= new SchemaGenerator();
			this.dataManagers	= new Stack ();
		}

		public void Dispose()
		{
			this.connecton.Dispose();
			this.schema.Dispose();
			while( this.dataManagers.Count > 0 ){
				IManager curManager = ( IManager ) this.dataManagers.Pop();
				curManager.Dispose();
			}
		}
		#endregion

		#region Public functions
		public bool PrepareConnection()
		{
			return YariSoft.DBUtil.Util.PrepareConnectionString( this.connecton );
		}

		public bool MoveDown()
		{
			switch ( this.DetailLevel ){
				case DetailLevel.DBLevel:
					this.dataManagers.Push( new DBManager ( this.connecton, this.schema ) );
					break;
				case DetailLevel.TableLevel:
					this.dataManagers.Push( new TableManager ( this.connecton, this.schema ) );
					break;
			}
			return true;
		}

		public bool MoveUp()
		{
			if( this.dataManagers.Count > 0 ){
				IManager curManager = ( IManager ) this.dataManagers.Pop();
				curManager.Dispose();
			}
			return true;
		}

		public void Clear()
		{
			this.dataManagers.Clear();
		}


		public DataView FillData( object SelectValue )
		{
			IManager curManager = (IManager)this.dataManagers.Peek();
			return curManager.FillData( SelectValue );
		}

		public DataView RefreshData( object SelectValue )
		{
			IManager curManager = (IManager)this.dataManagers.Peek();
			return curManager.RefreshData( SelectValue );
		}


		public bool UpdateData( object UpdateObject )
		{
			IManager curManager = (IManager)this.dataManagers.Peek();
			return curManager.UpdateData( UpdateObject );
		}
		

		public bool DeleteData( DataView Source, ArrayList SelectedRows )
		{
			bool status = false;
			DBBaseOperation operation = null;
			switch ( this.DetailLevel ){
				case DetailLevel.TableLevel:
					operation = new TableDeleteOperation( this.connecton, Source, SelectedRows );
					break;
				case DetailLevel.DataLevel:
					operation = new DataDeleteOperation( this.connecton, Source, SelectedRows );
					(( DataDeleteOperation )operation).OnSourceDataChanged += new YariSoft.DBUtil.DBBaseOperation.OnDataChangedEventHandler( this.UpdateData );
					break;
			}
			if( operation != null ){
				status = operation.Exec();
				operation.Dispose();
			}
			return status;
		}

		public bool CopyData( object Source, object Destination, ArrayList SelectedRows, DataPanelManager DestinationManager )
		{
			bool status = false;
			DBBaseOperation operation = null;
			switch ( this.DetailLevel ){
				case DetailLevel.TableLevel:
					operation = new TableCopyOperation( ( DataSet )this.schema.Schema, DestinationManager.Connection, SelectedRows );
					break;
				case DetailLevel.DataLevel:
					if( this._identityOff && IsIdentityColumnsExist( (( DataView )Destination).Table ) ){
						operation = new IdentityDataOperation( DestinationManager.Connection, (( DataView )Source), (( DataView )Destination), SelectedRows );
						status = (( IdentityDataOperation )operation ).Exec( new YariSoft.DBUtil.DBBaseOperation.OnDataChangedEventHandler( DestinationManager.UpdateData ));
					} else {	
						operation = new DataCopyOperation( DestinationManager.Connection, (( DataView )Source), (( DataView )Destination), SelectedRows );
						(( DataCopyOperation  )operation ).OnDestinationDataChanged += new YariSoft.DBUtil.DBBaseOperation.OnDataChangedEventHandler( DestinationManager.UpdateData );
					}
					break;
			}

			if( ! ( operation is IdentityDataOperation ) ){
				status = operation.Exec();
			}
			operation.Dispose();
			return status;
		}

		public bool FillTableDataByFK ( string FKName )
		{
			IManager curManager = (IManager)this.dataManagers.Peek();
			return curManager.FillTableDataByFK( FKName );
		}
		#endregion

		#region Private functions
		private bool IsIdentityColumnsExist ( DataTable Table )
		{
			foreach( DataColumn column in Table.Columns ){
				if( column.AutoIncrement ){
					return true;
				}
			}
			return false;
		}
		#endregion

	}
}

⌨️ 快捷键说明

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