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

📄 statementbase.cs

📁 .net的数据持久层
💻 CS
字号:
using System;
using System.Data;
using System.Text;

namespace Platform.Data {

	public abstract class StatementBase : ISqlStatement, ICloneable {

		public static readonly int DEFAULT_STRING_SIZE = 256;
		
		private string _TableName;
		private string _IdField;
		private string _FieldString;
		private string _KeyFieldString;
		private string _SqlClause;
		private string _WhereString;

		private CommandType _CommandType;
		private FieldPropCollection _Fields;
		private DataParameterCollection _Parameters;
		
		protected  StringBuilder _CriteriaString;
		protected  StringBuilder CriteriaString 
		{
			get 
			{
				if( _CriteriaString == null )
				{
					_CriteriaString = new StringBuilder();
				}
				return _CriteriaString;
			}
		}

		
		protected  int _ParameterCount;
		protected  string NewParameterName 
		{
			get { return String.Format("PARA__{0}_1", _ParameterCount++ ); }
		}

		public StatementBase() {
			this.CommandType = CommandType.Text;
			_Parameters = new DataParameterCollection();
		}

		public StatementBase( object obj ) : this() {
			_Fields = OpBroker.Instance.GetFields( obj );
			_TableName = OpBroker.Instance.GetTableName( obj );
			_SqlClause = String.Empty;
			this.BuildSqlClause();
		}
		
		public StatementBase( object obj ,string _TName) : this() 
		{
			_Fields = OpBroker.Instance.GetFields( obj );
			_TableName = _TName;
			_SqlClause = String.Empty;
			this.BuildSqlClause();
		}

		public CommandType CommandType {
			get { return _CommandType; }
			set { _CommandType = value; }
		}
		
		public string WhereString {
			get { return _WhereString; }
			set { _WhereString = value; }
		}

		public string SqlClause {
			get { return _SqlClause; }
			set { _SqlClause = value; }
		}

		protected string TableName {
			get { return _TableName; }
			set { _TableName = value; }
		}

		protected string IdField{
			get { return _IdField; }
			set { _IdField = value; }
		}


		protected FieldPropCollection Fields{
			get { return _Fields; }
			set { _Fields = value; }
		}

		protected string FieldString{
			get { return _FieldString; }
			set { _FieldString = value; }
		}

		protected string KeyFieldsString {
			get { return _KeyFieldString; }
			set { _KeyFieldString = value; }
		}

		public DataParameterCollection Parameters{
			get { return _Parameters; }
		}

		public abstract void BuildSqlClause();
		
		public abstract void FillDataParameter( object obj );

		public abstract StatementBase Create();

		public virtual object Clone(){
			StatementBase sql = this.Create();
			sql.SqlClause = this.SqlClause;
			sql.Fields = this.Fields;
			sql.TableName = this.TableName;
			foreach(DataParameter dp in this.Parameters){
				sql.Parameters.Add((DataParameter)dp.Clone());
			}
			return sql;
		}

		protected string BuildFieldString(){
			StringBuilder sel = new StringBuilder();
			foreach( FieldProp fp in this.Fields){				
				if( sel.Length > 0 ){
					sel.Append( ",");
				}
				sel.Append( fp.FieldName );
			}
			return sel.ToString();
		}

		protected string BuildKeyFieldString(){
			StringBuilder sb = new StringBuilder();
			foreach( FieldProp fp in this.Fields){				
				if( fp.IsKeyField ){
					if( sb.Length > 0 ){
						sb.Append( ",");
					}
					sb.Append( fp.FieldName );
				}
			}
			return sb.ToString();
		}

		protected DataParameter MakeDataParameter( FieldProp fp ){
			DataParameter dp = new DataParameter(fp.FieldName,  null);
			if( fp.Property.PropertyType == typeof(string) ){
				if( fp.Size == 0 ){
					dp.Size = DEFAULT_STRING_SIZE;
				}
				else{
					dp.Size = fp.Size;
				}
			}
			return dp;
		}

		protected string BuildWhereString(){
			StringBuilder sb = new StringBuilder();
			foreach(FieldProp fp in this.Fields){
				if( fp.IsKeyField ){
					if( sb.Length > 0 ){
						sb.Append( " AND " );
					}
					sb.Append( String.Format( "{0}={1}{0}", fp.FieldName, DataHelper.DataDriver.ParameterPrix ) );
					this.Parameters.Add( this.MakeDataParameter( fp ) );
				}
			}
			return sb.ToString();
		}

		protected virtual string GetTypeString( CriteriaType type )
		{
			switch( type )
			{
				case CriteriaType.NotEquals:
					return "<>";

				case CriteriaType.LessThan:
					return "<";

				case CriteriaType.LessThanEquals:
					return "<=";

				case CriteriaType.MoreThan :
					return ">";

				case CriteriaType.MoreThanEquals:
					return ">=";

				case CriteriaType.Like:
					return "LIKE";

				case CriteriaType.NotLike:
					return "NOT LIKE";

				case CriteriaType.Equals:
				default:
					return "=";
			}
		}

		protected virtual void AddCriterias(CriteriaCollection cts )
		{
			foreach(Criteria ct in cts )
			{
				this.AddCriteria( this.GetTypeString(ct.Type), ct.Name, ct.Value);
			}
		}
		protected virtual  void AddCriteria( string type, string prop, object value)
		{
			if( this.CriteriaString.Length > 0 ) 
			{
				this.CriteriaString.Append( " AND " );
			}
			string fn = this.Fields[prop].FieldName;
			string pn = this.NewParameterName;
			this.CriteriaString.Append( String.Format("{0} {1} {2}{3}", fn, type, DataHelper.DataDriver.ParameterPrix, pn));
			this.Parameters.Add( new DataParameter( pn, value ) );
		}


	}
}

⌨️ 快捷键说明

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