12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985 |
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Text;
- using System.Data;
- using Tofly.Data.General;
- using Tofly.Data.Metadata;
- using Tofly.Core.Util;
- using Tofly.Core.Context;
- using Tofly.Core.Context.Support;
- using Tofly.Data.MetadataManager;
- namespace Tofly.Data.ADO
- {
-
-
-
- public abstract class TableClass : ITable
- {
- private IWorkspace adoWorkspace;
- private ITableInfo tableInfo;
- private string tableName;
- public TableClass(IWorkspace pWorkspace, string tableName)
- {
- this.adoWorkspace = pWorkspace;
- this.tableName = tableName;
- TableType tableType = this.adoWorkspace.GetObjectType(tableName);
- if (tableType == General.TableType.Raster || tableType == General.TableType.UnDefine)
- throw new Exception("数据表:" + tableName + "不存在!");
- }
-
-
-
- protected virtual ITableInfo TableInfo
- {
- get
- {
- if (tableInfo == null)
- {
- tableInfo = this.adoWorkspace.GetTableMetadate(tableName);
- Tofly.Data.Util.AutoFieldUtils.DoAutoField(tableInfo, metadataTable);
- }
- return tableInfo;
- }
- }
- #region ITable 成员
-
-
-
- public virtual IWorkspace Workspace
- {
- get { return adoWorkspace; }
- }
- private bool hascheckmetadatatable = false;
- private IMetadataTable metadataTable;
-
-
-
- public virtual IMetadataTable MetadataTable
- {
- get
- {
- lock (this)
- {
- if (metadataTable == null && TableToMetadataTable != null && !hascheckmetadatatable)
- {
- metadataTable = TableToMetadataTable.ToMetadataTable(this);
- Tofly.Data.Util.AutoFieldUtils.DoAutoField(tableInfo, metadataTable);
- hascheckmetadatatable = true;
- }
- return metadataTable;
- }
- }
- set
- {
- lock (this)
- {
- metadataTable = value;
- Tofly.Data.Util.AutoFieldUtils.DoAutoField(tableInfo, metadataTable);
- }
- }
- }
- private ITableToMetadataTable tableToMetadataTable;
-
-
-
- public virtual ITableToMetadataTable TableToMetadataTable
- {
- get
- {
- lock (this)
- {
- if (tableToMetadataTable == null)
- {
- IApplicationContext context = ContextRegistry.GetContext();
- string objName = "TableToMetadataTable";
- tableToMetadataTable = context.GetObject(objName) as ITableToMetadataTable;
- }
- }
- return tableToMetadataTable;
- }
- set
- {
- tableToMetadataTable = value;
- }
- }
-
-
-
- public string TableName
- {
- get { return tableName; }
- }
-
-
-
- public TableType TableType
- {
- get
- {
- if (this.MetadataTable != null)
- return this.MetadataTable.TableType;
- else
- return TableInfo.TableType;
- }
- set { }
- }
-
-
-
- public Field[] Fields
- {
- get
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.Fields;
- else
- return TableInfo.Fields;
- }
- }
-
-
-
- public Field[] DataBaseFields
- {
- get
- {
- return TableInfo.Fields;
- }
- }
-
-
-
-
-
- public Field GetDataBaseField(string fieldName)
- {
- return TableInfo.GetField(fieldName);
- }
-
-
-
- public int FieldCount
- {
- get
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.FieldCount;
- else
- return TableInfo.FieldCount;
- }
- }
-
-
-
-
-
- public Field GetField(string fieldName)
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.GetField(fieldName);
- else
- return TableInfo.GetField(fieldName);
- }
-
-
-
-
-
- public Field[] GetKeyFields()
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.GetKeyFields();
- else
- return TableInfo.GetKeyFields();
- }
-
-
-
-
-
- public Field[] GetKeyNoAutoFields()
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.GetKeyNoAutoFields();
- else
- return TableInfo.GetKeyNoAutoFields();
- }
-
-
-
-
- public Field[] GetUniqueFields()
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.GetUniqueFields();
- else
- return TableInfo.GetUniqueFields();
- }
-
-
-
-
-
- public Field[] GetAutoFields()
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.GetAutoFields();
- else
- return TableInfo.GetAutoFields();
- }
-
-
-
-
-
- public Field GetAutoField()
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.GetAutoField();
- else
- return TableInfo.GetAutoField();
- }
-
-
-
- public string OIDFieldName
- {
- get
- {
- Field field = GetAutoField();
- if (field == null)
- return null;
- else
- return field.FieldName;
- }
- }
-
-
-
-
- public Field[] GetCodeRuleFields()
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.GetCodeRuleFields();
- else
- return TableInfo.GetCodeRuleFields();
- }
-
-
-
-
-
- public String GetSelectFields(bool onlyCanShow)
- {
- if (this.MetadataTable != null && this.MetadataTable.FieldCount > 0)
- return this.MetadataTable.GetSelectFields(onlyCanShow);
- else
- return TableInfo.GetSelectFields(onlyCanShow);
- }
-
-
-
-
- public virtual void AddField(Field field)
- {
- TableInfoClass pInfo = TableInfo as TableInfoClass;
- if (pInfo == null)
- throw new NotSupportedException();
- if (field != null && !StringUtils.IsNullOrSpace(field.FieldName))
- {
- if (!pInfo.InnerFields.ContainsKey(field.FieldName.ToUpper().Trim()))
- {
- pInfo.InnerFields.Add(field.FieldName.ToUpper().Trim(), field);
- this.adoWorkspace.AddTableField(field, tableName);
- if (this.MetadataTable != null)
- this.MetadataTable.AddField(field);
- }
- }
- }
-
-
-
-
- public void AddLogicField(Field field)
- {
- TableInfoClass pInfo = TableInfo as TableInfoClass;
- if (pInfo == null)
- throw new NotSupportedException();
- if (field != null && !StringUtils.IsNullOrSpace(field.FieldName))
- {
- if (!pInfo.InnerFields.ContainsKey(field.FieldName.ToUpper().Trim()))
- {
- pInfo.InnerFields.Add(field.FieldName.ToUpper().Trim(), field);
- if (this.MetadataTable != null)
- this.MetadataTable.AddLogicField(field);
- }
- }
- }
-
-
-
-
- public virtual void RemoveField(Field field)
- {
- TableInfoClass pInfo = TableInfo as TableInfoClass;
- if (pInfo == null)
- throw new NotSupportedException();
- if (field != null && !StringUtils.IsNullOrSpace(field.FieldName))
- {
- if (pInfo.InnerFields.ContainsKey(field.FieldName.ToUpper().Trim()))
- {
- pInfo.InnerFields.Remove(field.FieldName.ToUpper().Trim());
- this.adoWorkspace.DeleteTableField(field.FieldName, tableName);
- }
- }
- }
-
-
-
-
- public virtual void RemoveFields(List<Field> fields)
- {
- if (fields == null || fields.Count == 0)
- return;
- if (this.Workspace.WorkspaceType != WorkspaceType.SqlLite)
- {
- for (int i = 0; i < fields.Count; i++)
- this.RemoveField(fields[i]);
- }
- else
- {
- string sSelectFields = null;
- List<string> fieldstrings = new List<string>();
- for (int i = 0; i < fields.Count; i++)
- {
- fieldstrings.Add(fields[i].FieldName);
- }
- for (int i = 0; i < this.FieldCount; i++)
- {
- Field pField = this.Fields[i];
- if (pField == null)
- continue;
- if (fieldstrings.Contains(pField.FieldName))
- continue;
- sSelectFields += pField.FieldName + ",";
- }
- string temptablename = this.TableName + "_Temp";
- if (!string.IsNullOrEmpty(sSelectFields))
- {
- sSelectFields = sSelectFields.Substring(0, sSelectFields.Length - 1);
-
- string strSql = string.Format("CREATE TABLE {0} AS SELECT {1} FROM {2}", temptablename, sSelectFields, this.TableName);
- this.Workspace.ExecuteSql(strSql);
-
- strSql = string.Format("DROP TABLE IF EXISTS {0}", this.TableName);
- this.Workspace.ExecuteSql(strSql);
-
- strSql = string.Format("ALTER TABLE {0} RENAME TO {1}", temptablename, this.TableName);
- this.Workspace.ExecuteSql(strSql);
- }
- }
- }
-
-
-
-
- public void RemoveLogicField(Field field)
- {
- TableInfoClass pInfo = TableInfo as TableInfoClass;
- if (pInfo == null)
- throw new NotSupportedException();
- if (field != null && !StringUtils.IsNullOrSpace(field.FieldName))
- {
- if (pInfo.InnerFields.ContainsKey(field.FieldName.ToUpper().Trim()))
- {
- pInfo.InnerFields.Remove(field.FieldName.ToUpper().Trim());
- if (this.MetadataTable != null)
- this.MetadataTable.RemoveLogicField(field);
- }
- }
- }
-
-
-
-
- public virtual void UpdateField(Field field)
- {
- TableInfoClass pInfo = TableInfo as TableInfoClass;
- if (pInfo == null)
- throw new NotSupportedException();
- if (field != null && !StringUtils.IsNullOrSpace(field.FieldName))
- {
- if (pInfo.InnerFields.ContainsKey(field.FieldName.ToUpper().Trim()))
- {
- pInfo.InnerFields[field.FieldName.ToUpper().Trim()] = field;
- this.adoWorkspace.UpdateTableField(field, tableName);
- }
- else
- {
- throw new Exception();
- }
- }
- }
-
-
-
-
-
- public virtual void GetDataReader(IQueryFilter queryFilter, DataReaderDelegate dataDelegate)
- {
- if (dataDelegate == null)
- return;
- string sql = QueryFilter.ConvertToSql(this, queryFilter);
- if (queryFilter == null)
- adoWorkspace.GetDataReader(sql, dataDelegate);
- else
- adoWorkspace.GetDataReader(sql, dataDelegate, queryFilter.WhereParameter);
- }
-
-
-
-
-
- public virtual object GetExecuteScalar(IQueryFilter queryFilter)
- {
- string sql = QueryFilter.ConvertToSql(this, queryFilter);
- return adoWorkspace.GetExecuteScalar(sql, queryFilter.WhereParameter);
- }
-
-
-
-
-
- public virtual DataTable GetDataTable(IQueryFilter queryFilter)
- {
- string sql = QueryFilter.ConvertToSql(this, queryFilter);
- DataTable dt = null;
- if (queryFilter == null)
- {
- dt = adoWorkspace.GetDataTable(sql);
- }
- else
- {
- dt = adoWorkspace.GetDataTable(sql, queryFilter.WhereParameter);
- }
- return dt;
- }
-
-
-
-
-
-
- public virtual List<T> GetEntityList<T>(IQueryFilter queryFilter) where T : IRow, new()
- {
- List<T> entityBaseList = new List<T>();
- GetDataReader(queryFilter, delegate(Tofly.Data.General.IDataReader reader, Object tag)
- {
- while (reader.Read())
- {
- if (reader.Row is T)
- {
- entityBaseList.Add((T)reader.Row);
- }
- else
- {
- T entity = new T();
- entity.OriginalObjects = reader.Row.OriginalObjects;
- entity.CurrentObjects = reader.Row.CurrentObjects;
- entityBaseList.Add(entity);
- }
- }
- });
- return entityBaseList;
- }
-
-
-
-
-
-
- public virtual T GetEntity<T>(IQueryFilter queryFilter) where T : IRow, new()
- {
- T entity = default(T);
- GetDataReader(queryFilter, delegate(Tofly.Data.General.IDataReader reader, Object tag)
- {
- if (reader.Read())
- {
- if (reader.Row is T)
- {
- entity = (T)reader.Row;
- }
- else
- {
- entity = new T();
- entity.OriginalObjects = reader.Row.OriginalObjects;
- entity.CurrentObjects = reader.Row.CurrentObjects;
- }
- }
- });
- return entity;
- }
-
-
-
-
-
- public void GetDataReaderByRow(IRow queryFilter, DataReaderDelegate dataDelegate)
- {
- GetDataReader(RowToQueryFilter(queryFilter), dataDelegate);
- }
- private IQueryFilter RowToQueryFilter(IRow entity)
- {
- if (entity == null)
- return null;
- string strWhere = "";
- List<GlobalParameter> paraList = new List<GlobalParameter>();
- foreach (KeyValuePair<string, object> item in entity.CurrentObjects)
- {
- if (item.Value == null)
- continue;
- strWhere += item.Key + "=@" + item.Key + " and ";
- paraList.Add(new GlobalParameter("@" + item.Key, item.Value));
- }
- if (strWhere != "")
- {
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.WhereString = strWhere.Remove(strWhere.Length - 4);
- queryFilter.WhereParameter = paraList.ToArray();
- return queryFilter;
- }
- return null;
- }
-
-
-
-
-
- public DataTable GetDataTableByRow(IRow queryFilter)
- {
- return GetDataTable(RowToQueryFilter(queryFilter));
- }
-
-
-
-
-
-
- public List<T> GetEntityListByRow<T>(IRow queryFilter) where T : IRow, new()
- {
- return GetEntityList<T>(RowToQueryFilter(queryFilter));
- }
-
-
-
-
-
-
- public T GetEntityByRow<T>(IRow queryFilter) where T : IRow, new()
- {
- return GetEntity<T>(RowToQueryFilter(queryFilter));
- }
-
-
-
-
-
-
- public virtual void PageSelect(IQueryFilter queryFilter, PageInfo pageInfo, DataReaderDelegate dataDelegate)
- {
- PageSelect(queryFilter, pageInfo, dataDelegate, null);
- }
-
-
-
-
-
-
- public virtual void PageSelect(IQueryFilter queryFilter, PageInfo pageInfo, DataReaderDelegate dataDelegate, FinshPageCountHander pageCountHander)
- {
- if (dataDelegate == null)
- return;
- PageParameter pageParameter = PageParameter.ToPageParameter(this, queryFilter);
- adoWorkspace.PageSelect(pageParameter, pageInfo, dataDelegate, pageCountHander);
- }
-
-
-
-
-
-
- public virtual System.Data.DataTable PageSelect(IQueryFilter queryFilter, PageInfo pageInfo)
- {
- return InnerPageSelect(queryFilter, pageInfo, null);
- }
-
-
-
-
-
-
- public virtual System.Data.DataTable PageSelect(IQueryFilter queryFilter, PageInfo pageInfo, FinshPageCountHander pageCountHander)
- {
- return InnerPageSelect(queryFilter, pageInfo, pageCountHander);
- }
- private DataTable InnerPageSelect(IQueryFilter queryFilter, PageInfo pageInfo, FinshPageCountHander pageCountHander)
- {
- PageParameter pageParameter = PageParameter.ToPageParameter(this, queryFilter);
- return adoWorkspace.PageSelect(pageParameter, pageInfo, pageCountHander);
- }
-
-
-
-
-
- public virtual int GetRowCount(IQueryFilter queryFilter)
- {
- if (queryFilter == null)
- queryFilter = new QueryFilter();
- queryFilter.SelectFields = "count(1)";
- object obj = GetExecuteScalar(queryFilter);
- if (obj == null || obj.ToString().Trim() == "")
- return 0;
- else
- {
- int count=0;
- int.TryParse(obj.ToString(), out count);
- return count;
- }
- }
-
-
-
-
-
-
- public virtual List<T> PageSelect<T>(IQueryFilter queryFilter, PageInfo pageInfo) where T : IRow, new()
- {
- return PageSelect<T>(queryFilter, pageInfo, null);
- }
-
-
-
-
-
-
- public virtual List<T> PageSelect<T>(IQueryFilter queryFilter, PageInfo pageInfo, FinshPageCountHander pageCountHander) where T : IRow, new()
- {
- List<T> entityBaseList = new List<T>();
- PageSelect(queryFilter, pageInfo, delegate(Tofly.Data.General.IDataReader reader, object tag)
- {
- while (reader.Read())
- {
- T entity = new T();
- entity.OriginalObjects = reader.Row.OriginalObjects;
- entity.CurrentObjects = reader.Row.CurrentObjects;
- entityBaseList.Add(entity);
- }
- }, pageCountHander);
- return entityBaseList;
- }
-
-
-
-
-
-
- public List<object> GetUniqueValue(string fieldName, int maxCount)
- {
- throw new NotImplementedException();
- }
-
-
-
-
-
-
- public virtual List<String> GetUniqueValue(String fieldName)
- {
- return GetUniqueValue(fieldName, new QueryFilter());
- }
-
-
-
-
-
- public List<String> GetUniqueValue(string fieldName, IQueryFilter filter)
- {
- Field fm = GetField(fieldName);
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = fieldName;
- queryFilter.GroupByString = fieldName;
- queryFilter.OrderByString = fieldName;
-
- if(filter !=null && !String.IsNullOrEmpty(filter.WhereString))
- queryFilter.WhereString = filter.WhereString;
- List<string> result = new List<string>();
- GetDataReader(queryFilter, delegate(Tofly.Data.General.IDataReader reader, object tag)
- {
- while (reader.Read())
- {
- object obj = reader.Row[fieldName];
- if (obj != null && obj != DBNull.Value && obj.ToString() != "")
- {
- result.Add(obj.ToString());
- }
- }
- });
- return result;
- }
-
-
-
-
-
-
- public virtual List<UniqueValue> GetUniqueValueEx(String fieldName)
- {
- Field fm = GetField(fieldName);
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = fieldName;
- queryFilter.GroupByString = fieldName;
- queryFilter.OrderByString = fieldName;
- List<UniqueValue> result = new List<UniqueValue>();
- GetDataReader(queryFilter, delegate(Tofly.Data.General.IDataReader reader, object tag)
- {
- while (reader.Read())
- {
- object obj = reader.Row[fieldName];
- if (obj != null && obj != DBNull.Value && obj.ToString() != "")
- {
- UniqueValue uniqueValue = new UniqueValue();
- uniqueValue.Value = obj;
- if (fm != null)
- uniqueValue.SearchValue = DbValueConvertUtils.ConvertToCaption(fm.DataType, obj);
- else
- uniqueValue.SearchValue = obj.ToString();
- if (fm.IsCode)
- {
- string key = obj.ToString();
- if (fm.Domain.ContainsKey(key))
- uniqueValue.CaptionValue = fm.Domain[key];
- else
- uniqueValue.CaptionValue = obj.ToString();
- }
- else
- uniqueValue.CaptionValue = obj.ToString();
- result.Add(uniqueValue);
- }
- }
- });
- return result;
- }
-
-
-
-
-
-
- public virtual void GetUniqueValue(String fieldName, UniqueValueDelegate drDelegate)
- {
- if (drDelegate == null)
- return;
- Field fm = GetField(fieldName);
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = fieldName;
- queryFilter.GroupByString = fieldName;
- queryFilter.OrderByString = fieldName;
- GetDataReader(queryFilter, delegate(Tofly.Data.General.IDataReader reader, object tag)
- {
- while (reader.Read())
- {
- object obj = reader.Row[fieldName];
- if (obj != null && obj != DBNull.Value && obj.ToString() != "")
- {
- if (!drDelegate(obj.ToString()))
- break;
- }
- }
- });
- }
- private DataTable cachetable = null;
-
-
-
-
-
-
- public virtual void GetUniqueValueEx(String[] fieldNames, UniqueValueDelegateEx drDelegate)
- {
- if (drDelegate == null)
- return;
- if (fieldNames.Length <= 0)
- return;
-
- if (fieldNames.Length == 1)
- {
- GetUniqueValueEx(fieldNames[0], drDelegate);
- return;
- }
- string maxRelationField = null;
- if (this.MetadataTable != null)
- {
-
- MetadataField metaField = this.metadataTable.GetField(fieldNames[0]);
- if (metaField != null)
- {
- string relationgroupName = metaField.RelationGroup;
- MetadataField[] metaFields = this.metadataTable.Fields;
- if (metaFields!=null && metaFields.Length > 0)
- {
- int maxRelationIndex = 0; int maxIndex = 0;
- for (int i = 0; i < metaFields.Length; i++)
- {
- if (metaFields[i].RelationGroup == relationgroupName)
- if (maxRelationIndex < metaFields[i].RelationIndex)
- {
- maxRelationIndex = metaFields[i].RelationIndex;
- maxIndex = i;
- }
- }
- if (metaFields[maxIndex].IsCode)
- {
- foreach (KeyValuePair<string, string> domain in metaFields[maxIndex].Domain)
- {
- if (domain.Key.Length > 4)
- {
- this.GetUniqueValueEx(fieldNames[fieldNames.Length - 1], drDelegate);
- return;
- }
- break;
- }
- }
- }
- }
-
- }
-
- StringBuilder fieldName = new StringBuilder();
- fieldName.Append(fieldNames[0]);
- for (int i = 1; i < fieldNames.Length; i++)
- {
- fieldName.AppendFormat(", {0}", fieldNames[i]);
- }
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = fieldName.ToString();
- queryFilter.GroupByString = fieldName.ToString();
- queryFilter.OrderByString = fieldNames[0];
- IMetadataTable domaintable=null;
- if (this.MetadataTable != null)
- domaintable = MetadataWorkspaceFactory.OpenMetadataWorkspace().OpenTable(this.metadataTable.GetField(fieldNames[0]).CodeTablePK);
- else
- domaintable= this.tableToMetadataTable.ToMetadataTable(this);
- string IDField = null;
- string pIDField = null;
- string codeField = null;
- string captionField = null;
- if (domaintable != null)
- {
- cachetable = domaintable.Table.GetDataTable(new QueryFilter());
- IDField = domaintable.IDFieldName;
- pIDField = domaintable.PIDFieldName;
- codeField = domaintable.CodeFieldName;
- captionField = domaintable.CaptionFieldName;
- }
- GetDataReader(queryFilter, delegate(Tofly.Data.General.IDataReader reader, object tag)
- {
- while (reader.Read())
- {
- UniqueValue uniqueValue = new UniqueValue();
- StringBuilder searchValue = new StringBuilder();
- StringBuilder captionValue = new StringBuilder();
- StringBuilder whereValue = new StringBuilder();
- string pID = null;
- object obj = reader.Row[fieldNames[0]];
- Field fm = GetField(fieldNames[0]);
- if (obj != null && obj != DBNull.Value)
- {
- uniqueValue.Value = obj;
- if (fm != null)
- searchValue.Append(DbValueConvertUtils.ConvertToCaption(fm.DataType, obj));
- else
- searchValue.Append(obj.ToString());
- whereValue.AppendFormat("{0}={1}", codeField, DbValueConvertUtils.ConvertToCaption(fm.DataType, obj));
- if (fm.IsCode)
- {
- string key = obj.ToString();
- if (fm.Domain.ContainsKey(key) && cachetable != null)
- {
- DataRow[] rows = cachetable.Select(whereValue.ToString());
- if (rows.Length > 0)
- {
- pID = rows[0][IDField].ToString();
- captionValue.Append(rows[0][captionField]);
- }
- else
- captionValue.Append(obj.ToString());
-
- }
- else
- captionValue.Append(obj.ToString());
- }
- else
- captionValue.Append(obj.ToString());
- string strWhere = null;
- for (int j = 1; j < fieldNames.Length; j++)
- {
- whereValue.Clear();
- obj = reader.Row[fieldNames[j]];
- fm = GetField(fieldNames[j]);
- if (obj != null && obj != DBNull.Value)
- {
- uniqueValue.Value = obj;
- if (fm != null)
- searchValue.AppendFormat(",{0}", DbValueConvertUtils.ConvertToCaption(fm.DataType, obj));
- else
- searchValue.AppendFormat(",{0}", obj.ToString());
- whereValue.AppendFormat("{0}={1}", codeField, DbValueConvertUtils.ConvertToCaption(fm.DataType, obj));
- strWhere = whereValue.ToString() + " And " + pIDField + "='" + pID + "'";
- if (fm.IsCode)
- {
- string key = obj.ToString();
- if (fm.Domain.ContainsKey(key) && cachetable != null)
- {
- DataRow[] rows = cachetable.Select(strWhere);
- if (rows.Length > 0)
- {
- pID = rows[0][IDField].ToString();
- captionValue.AppendFormat(",{0}", rows[0][captionField]);
- }
- else
- captionValue.AppendFormat(",{0}", obj.ToString());
-
- }
- else
- captionValue.AppendFormat(",{0}", obj.ToString());
- }
- else
- captionValue.AppendFormat(",{0}", obj.ToString());
- }
- }
- uniqueValue.CaptionValue = captionValue.ToString();
- uniqueValue.SearchValue = searchValue.ToString();
- if (!drDelegate(uniqueValue))
- break;
- }
- }
- });
- }
-
-
-
-
-
-
- public virtual void GetUniqueValueEx(String fieldName, UniqueValueDelegateEx drDelegate, string definitionExpression = "")
- {
- if (drDelegate == null)
- return;
- Field fm = GetField(fieldName);
- IQueryFilter queryFilter = new QueryFilter();
- if (!string.IsNullOrEmpty(definitionExpression))
- queryFilter.WhereString = definitionExpression;
- queryFilter.SelectFields = fieldName;
- queryFilter.GroupByString = fieldName;
- queryFilter.OrderByString = fieldName;
- GetDataReader(queryFilter, delegate(Tofly.Data.General.IDataReader reader, object tag)
- {
- while (reader.Read())
- {
- object obj = reader.Row[fieldName];
- if (obj != null && obj != DBNull.Value && obj.ToString() != "")
- {
- UniqueValue uniqueValue = new UniqueValue();
- uniqueValue.Value = obj;
- if (fm != null)
- uniqueValue.SearchValue = DbValueConvertUtils.ConvertToCaption(fm.DataType, obj);
- else
- uniqueValue.SearchValue = obj.ToString();
- if (fm.IsCode)
- {
- string key = obj.ToString();
- if (fm.Domain.ContainsKey(key))
- uniqueValue.CaptionValue = fm.Domain[key];
- else
- uniqueValue.CaptionValue = obj.ToString();
- }
- else
- uniqueValue.CaptionValue = obj.ToString();
- if (!drDelegate(uniqueValue))
- break;
- }
- }
- });
- }
-
-
-
-
-
-
- public virtual string ConvertToCaption(string fieldName, object value)
- {
- if (value == null)
- return "";
- Field fm = GetField(fieldName);
- if (fm != null)
- return DbValueConvertUtils.ConvertToCaption(fm.DataType, value);
- else
- return value.ToString();
- }
-
-
-
-
-
- public virtual long GetSpecFieldMaxValue(string fieldName, string otherCondition, params GlobalParameter[] paras)
- {
-
- long result = -1;
-
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = "max(" + fieldName + ") as maxfieldname";
- queryFilter.WhereString = otherCondition;
- queryFilter.WhereParameter = paras;
- string sql = QueryFilter.ConvertToSql(this, queryFilter);
-
- adoWorkspace.GetDataReader(sql, delegate(Tofly.Data.General.IDataReader reader, Object tag)
- {
- if (reader.Read())
- {
- result = reader.Row.GetValue<long>("maxfieldname");
- }
- });
-
- return result;
- }
-
-
-
-
-
- public virtual long GetSpecFieldMinValue(string fieldName, string otherCondition, params GlobalParameter[] paras)
- {
-
- long result = -1;
-
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = "min(" + fieldName + ") as minfieldname";
- queryFilter.WhereString = otherCondition;
- queryFilter.WhereParameter = paras;
- string sql = QueryFilter.ConvertToSql(this, queryFilter);
-
- adoWorkspace.GetDataReader(sql, delegate(Tofly.Data.General.IDataReader reader, Object tag)
- {
- if (reader.Read())
- {
- result = reader.Row.GetValue<long>("minfieldname");
- }
- });
-
- return result;
- }
-
-
-
-
-
- public virtual long GetSpecFieldMaxValueStrByInt(string fieldName, string otherCondition, params GlobalParameter[] paras)
- {
-
- long result = -1;
- Field sortField = this.GetField(fieldName);
- if (sortField == null)
- return result;
- if (sortField.DataType == GlobalDataType.Char || sortField.DataType == GlobalDataType.String || sortField.DataType == GlobalDataType.Text)
- {
-
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = fieldName;
- queryFilter.WhereString = otherCondition;
- queryFilter.WhereParameter = paras;
- List<long> maxList = new List<long>();
- long itemLenght = 0;
- object objRel = null;
- List<RowBase> rbs = this.GetEntityList<RowBase>(queryFilter);
- foreach (RowBase pRow in rbs)
- {
- objRel = pRow.GetValue<object>(fieldName);
- if (objRel == null)
- maxList.Add(0);
- else if (long.TryParse(objRel.ToString(), out itemLenght))
- maxList.Add(itemLenght);
- }
- if (maxList.Count <= 0)
- return 0;
- maxList.Sort(new Comparison<long>(delegate(long a, long b)
- {
- return b.CompareTo(a);
- }));
- return maxList[0];
- }
- else
- {
- result = GetSpecFieldMaxValue(fieldName, otherCondition, paras);
- }
- return result;
- }
-
-
-
-
-
- public virtual long GetSpecFieldMinValueStrByInt(string fieldName, string otherCondition, params GlobalParameter[] paras)
- {
-
- long result = -1;
- Field sortField = this.GetField(fieldName);
- if (sortField == null)
- return result;
- if (sortField.DataType == GlobalDataType.Char || sortField.DataType == GlobalDataType.String || sortField.DataType == GlobalDataType.Text)
- {
-
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = fieldName;
- queryFilter.WhereString = otherCondition;
- queryFilter.WhereParameter = paras;
- string sql = QueryFilter.ConvertToSql(this, queryFilter);
- List<long> maxList = new List<long>();
- long itemLenght = 0;
- object objRel = null;
- List<RowBase> rbs = this.GetEntityList<RowBase>(queryFilter);
- foreach (RowBase pRow in rbs)
- {
- objRel = pRow.GetValue<object>(fieldName);
- if (objRel == null)
- maxList.Add(0);
- else if (long.TryParse(objRel.ToString(), out itemLenght))
- maxList.Add(itemLenght);
- }
- if (maxList.Count <= 0)
- return 0;
- maxList.Sort(new Comparison<long>(delegate(long a, long b)
- {
- return a.CompareTo(b);
- }));
- return maxList[0];
- }
- else
- {
- result = GetSpecFieldMaxValue(fieldName, otherCondition, paras);
- }
- return result;
- }
-
-
-
-
-
-
-
- public virtual long GetSpecFieldMaxUnuseValue(string fieldName, string otherCondition, params GlobalParameter[] paras)
- {
- throw new NotImplementedException();
- }
-
-
-
-
-
-
-
- public virtual long GetSpecFieldMinUnuseValue(string fieldName, string otherCondition, params GlobalParameter[] paras)
- {
- throw new NotImplementedException();
- }
-
-
-
-
-
-
-
- public virtual long GetSpecFieldMaxUnuseValueStrByInt(string fieldName, string otherCondition, params GlobalParameter[] paras)
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- throw new NotImplementedException();
- }
-
-
-
-
-
-
-
- public virtual long GetSpecFieldMinUnuseValueStrByInt(string fieldName, string otherCondition, params GlobalParameter[] paras)
- {
-
- long result = -1;
- Field sortField = this.GetField(fieldName);
- if (sortField == null)
- return result;
- if (sortField.DataType == GlobalDataType.Char || sortField.DataType == GlobalDataType.String || sortField.DataType == GlobalDataType.Text)
- {
-
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.SelectFields = fieldName;
- queryFilter.WhereString = otherCondition;
- queryFilter.WhereParameter = paras;
- string sql = QueryFilter.ConvertToSql(this, queryFilter);
- List<long> maxList = new List<long>();
- long itemLenght = 0;
- object objRel = null;
- adoWorkspace.GetDataReader(sql, delegate(Tofly.Data.General.IDataReader reader, Object tag)
- {
- while (reader.Read())
- {
- objRel = reader.Row.GetValue<object>(fieldName);
- if (objRel == null)
- maxList.Add(0);
- else if (long.TryParse(objRel.ToString(), out itemLenght))
- maxList.Add(itemLenght);
- }
- });
- if (maxList.Count <= 0)
- return 1;
- maxList.Sort(new Comparison<long>(delegate(long a, long b)
- {
- return a.CompareTo(b);
- }));
- long firstValue = maxList[0];
- if (firstValue > 1)
- return 1;
- long value = -1;
- for (int i = 0; i < maxList.Count; i++)
- {
- value = maxList[i];
- value++;
- if (!maxList.Contains(value))
- return value;
- }
- return -1;
- }
- else
- {
-
- }
- return result;
- }
-
-
-
-
-
-
-
-
-
- public virtual T GetNextEntity<T>(T t, string byFieldName, string whereString, OrderByType orderByType) where T : IRow, new()
- {
- return GetNextEntity<T>(t, byFieldName, whereString, orderByType, false);
- }
-
-
-
-
-
-
-
-
-
-
- public virtual T GetNextEntity<T>(T t, string byFieldName, string whereString, OrderByType orderByType, bool addCaptionField)
- where T : IRow, new()
- {
- if (t == null || StringUtils.IsNullOrEmpty(byFieldName))
- return default(T);
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.AddCaptionField = addCaptionField;
- switch (orderByType)
- {
- case OrderByType.ASC:
- queryFilter.WhereString = byFieldName + " > @curvalue ";
- queryFilter.OrderByString = byFieldName + " ASC ";
- break;
- case OrderByType.DESC:
- queryFilter.WhereString = byFieldName + " < @curvalue ";
- queryFilter.OrderByString = byFieldName + " DESC ";
- break;
- }
- if (!StringUtils.IsNullOrSpace(whereString))
- queryFilter.WhereString += " and (" + whereString + ") ";
- queryFilter.WhereParameter = new GlobalParameter[] {
- new GlobalParameter("@curvalue",t.GetValue<object>(byFieldName))
- };
- return GetEntity<T>(queryFilter);
- }
-
-
-
-
-
-
-
-
-
- public virtual T GetPerEntity<T>(T t, string byFieldName, string whereString, OrderByType orderByType) where T : IRow, new()
- {
- return GetPerEntity<T>(t, byFieldName, whereString, orderByType, false);
- }
-
-
-
-
-
-
-
-
-
-
- public virtual T GetPerEntity<T>(T t, string byFieldName, string whereString, OrderByType orderByType, bool addCaptionField) where T : IRow, new()
- {
- if (t == null || StringUtils.IsNullOrEmpty(byFieldName))
- return default(T);
- IQueryFilter queryFilter = new QueryFilter();
- queryFilter.AddCaptionField = addCaptionField;
- switch (orderByType)
- {
- case OrderByType.ASC:
- queryFilter.WhereString = byFieldName + " < @curvalue ";
- queryFilter.OrderByString = byFieldName + " DESC ";
- break;
- case OrderByType.DESC:
- queryFilter.WhereString = byFieldName + " > @curvalue ";
- queryFilter.OrderByString = byFieldName + " ASC ";
- break;
- }
- if (!StringUtils.IsNullOrSpace(whereString))
- queryFilter.WhereString += " and (" + whereString + ") ";
- queryFilter.WhereParameter = new GlobalParameter[] {
- new GlobalParameter("@curvalue",t.GetValue<object>(byFieldName))
- };
- return GetEntity<T>(queryFilter);
- }
- private bool useeditinterceptor = true;
-
-
-
- public virtual bool UseEditInterceptor
- {
- get { return useeditinterceptor; }
- set { useeditinterceptor = value; }
- }
-
-
-
-
- public virtual void Save(IRow entity)
- {
- if (entity == null)
- return;
- if (entity.IsNew)
- {
- Insert(entity);
- entity.ChangeObjects();
- }
- else
- {
- Update(entity);
- entity.ChangeObjects();
- }
- }
-
-
-
-
- public virtual void Save(List<IRow> entitys)
- {
- if (entitys == null || entitys.Count <= 0)
- return;
- List<IRow> newEntity = new List<IRow>();
- List<IRow> oldEntity = new List<IRow>();
- foreach (IRow item in entitys)
- {
- if (item.IsNew)
- newEntity.Add(item);
- else
- oldEntity.Add(item);
- }
- Insert(newEntity);
- Update(oldEntity);
- }
-
-
-
-
- protected virtual void Insert(List<IRow> entitys)
- {
- foreach (IRow entity in entitys)
- {
- Insert(entity);
- entity.ChangeObjects();
- }
- }
-
-
-
-
- protected virtual void Update(List<IRow> entitys)
- {
- List<ListSqlItem> listSql = new List<ListSqlItem>();
- foreach (IRow entity in entitys)
- {
- List<GlobalParameter> setParameter = new List<GlobalParameter>();
- string sql = "";
- GetUpdateWhere(entity, ref sql, ref setParameter);
- if (!StringUtils.IsNullOrSpace(sql))
- listSql.Add(new ListSqlItem(sql, setParameter.ToArray()));
- }
- adoWorkspace.ExecuteSql(listSql);
- foreach (IRow entity in entitys)
- {
- entity.ChangeObjects();
- }
- }
-
-
-
-
- protected virtual void Insert(IRow entity)
- {
- List<GlobalParameter> whereParameter = new List<GlobalParameter>();
- object obj = null;
- string sql = "";
-
- string fieldList = "";
- whereParameter.Clear();
- foreach (Field item in Fields)
- {
- if (item.IsAuto
- && (adoWorkspace.WorkspaceType == WorkspaceType.Oracle
- || adoWorkspace.WorkspaceType == WorkspaceType.SqlLite
- ))
- {
- fieldList += "[" + item.FieldName + "],";
- sql += "{AUTOFIELDVALUE},";
- }
- else
- {
- obj = entity.GetValue<object>(item.FieldName);
- if (obj != null)
- {
-
- if (item.DataType == GlobalDataType.Date || item.DataType == GlobalDataType.DateTime)
- {
- if (adoWorkspace.WorkspaceType != WorkspaceType.Oracle)
- {
- if (obj.Equals(DateTime.MinValue) || obj.Equals(DateTime.MaxValue))
- obj = DBNull.Value;
- else
- {
- obj = Convert.ToDateTime(obj).ToString("yyyy-MM-dd HH:MM:ss");
- }
- }
- }
- fieldList += "[" + item.FieldName + "],";
- sql += "@" + item.FieldName + ",";
- whereParameter.Add(new GlobalParameter("@" + item.FieldName, obj));
- }
- }
- }
- if (sql.Length > 0)
- {
- fieldList = fieldList.Remove(fieldList.Length - 1);
- sql = sql.Remove(sql.Length - 1);
- sql = "Insert into " + tableName + " (" + fieldList + ") values (" + sql + ")";
-
- Field[] autoKey = GetAutoFields();
- if (autoKey.Length == 1)
- {
- switch (adoWorkspace.WorkspaceType)
- {
- case WorkspaceType.Oracle:
-
-
-
-
-
-
-
-
- case WorkspaceType.SqlLite:
- string autoSql2 = "select max(" + autoKey[0].FieldName + ") from " + tableName;
- obj = adoWorkspace.GetExecuteScalar(autoSql2);
- long autoIndex = 1;
- if (obj != null)
- {
- long.TryParse(obj.ToString(), out autoIndex);
- autoIndex++;
- }
- sql = sql.Replace("{AUTOFIELDVALUE}", autoIndex.ToString());
- adoWorkspace.ExecuteSql(sql, whereParameter.ToArray());
- entity.SetValue(autoKey[0].FieldName, autoIndex);
- break;
- case WorkspaceType.SqlServer:
- case WorkspaceType.SqlServerExpress:
- adoWorkspace.ExecuteSql(sql, whereParameter.ToArray());
- sql += ";SELECT IDENT_CURRENT('" + tableName + "');";
- obj = adoWorkspace.GetExecuteScalar(sql, whereParameter.ToArray());
- if (obj != null && obj != DBNull.Value)
- entity.SetValue(autoKey[0].FieldName, obj);
- break;
- case WorkspaceType.Access:
- adoWorkspace.ExecuteSql(sql, whereParameter.ToArray());
- sql = "select @@identity as id";
- obj = adoWorkspace.GetExecuteScalar(sql);
- if (obj != null && obj != DBNull.Value)
- entity.SetValue(autoKey[0].FieldName, obj);
- break;
- case WorkspaceType.MySQL:
- String mysqlDbName = this.adoWorkspace.Database;
- mysqlDbName = mysqlDbName.Substring(mysqlDbName.LastIndexOf("/") + 1);
- String autoSqla = "select auto_increment from information_schema.tables where table_name='"
- + tableName + "' and TABLE_SCHEMA='"
- + mysqlDbName + "'";
- obj = adoWorkspace.GetExecuteScalar(autoSqla, null);
-
- if (sql.IndexOf("{AUTOFIELDVALUE}") > 0 && null == obj)
- {
- throw new Exception("请设置表的主键.");
- }
- sql = sql.Replace("{AUTOFIELDVALUE}", obj.ToString());
- adoWorkspace.ExecuteSql(sql, whereParameter.ToArray());
- if (obj != null)
- entity.SetValue(autoKey[0].FieldName, obj);
- break;
- case WorkspaceType.FileGDB:
- case WorkspaceType.Folder:
- case WorkspaceType.ExcelFile:
- case WorkspaceType.DbfFolder:
- default:
- throw new Exception();
- }
- }
- else
- {
- adoWorkspace.ExecuteSql(sql, whereParameter.ToArray());
- }
- }
- }
-
-
-
-
- protected virtual void Update(IRow entity)
- {
- List<GlobalParameter> setParameter = new List<GlobalParameter>();
- string sql = "";
- GetUpdateWhere(entity, ref sql, ref setParameter);
- if (StringUtils.IsNullOrSpace(sql))
- return;
- adoWorkspace.ExecuteSql(sql, setParameter.ToArray());
- }
- private void GetUpdateWhere(IRow entity, ref string sql, ref List<GlobalParameter> setParameter)
- {
- string whereString = "";
- object obj = null;
- List<GlobalParameter> whereParameters = new List<GlobalParameter>();
-
- Field[] autoFields = GetAutoFields();
- int i = 0;
- if (autoFields != null && autoFields.Length > 0)
- {
- obj = entity[autoFields[0].FieldName, DataVersion.Original];
- if (obj != null)
- {
- whereString = "[" + autoFields[0].FieldName + "]=@" + autoFields[0].FieldName + i.ToString();
- whereParameters.Add(new GlobalParameter("@" + autoFields[0].FieldName + i.ToString(), obj));
- }
- i++;
- }
-
- if (whereString.Length <= 0)
- {
- Field[] keys = GetKeyNoAutoFields();
- if (keys == null || keys.Length <= 0)
- throw new ArgumentException("无法更新当前数据!原因:无法确定更新主键!");
- foreach (Field item in keys)
- {
- obj = entity[item.FieldName, DataVersion.Original];
- if (obj == null)
- throw new ArgumentException("主键[" + item.FieldName + "]取值错误!");
- whereString += "[" + item.FieldName + "]=@" + item.FieldName + i.ToString() + " and ";
- whereParameters.Add(new GlobalParameter("@" + item.FieldName + i.ToString(), obj));
- i++;
- }
- whereString = whereString.Remove(whereString.Length - 4);
- }
- foreach (Field item in Fields)
- {
- if (!entity.HasChange(item.FieldName))
- continue;
- obj = entity.GetValue<Object>(item.FieldName);
- if (!item.IsAuto && !item.ReadOnly)
- {
- if (obj == null)
- obj = DBNull.Value;
-
- if (item.DataType == GlobalDataType.Date || item.DataType == GlobalDataType.DateTime)
- {
- if (adoWorkspace.WorkspaceType != WorkspaceType.Oracle)
- {
- if (obj.Equals(DateTime.MinValue) || obj.Equals(DateTime.MaxValue))
- obj = DBNull.Value;
- else
- {
- obj = Convert.ToDateTime(obj).ToString("yyyy-MM-dd HH:MM:ss");
- }
- }
- }
- sql += "[" + item.FieldName + "]=@" + item.FieldName + ",";
- setParameter.Add(new GlobalParameter("@" + item.FieldName, obj));
- }
- }
- if (sql.Length > 0)
- {
- sql = sql.Remove(sql.Length - 1);
- sql = "update " + tableName + " set " + sql + " where " + whereString;
- setParameter.AddRange(whereParameters);
- }
- }
-
-
-
-
-
- public virtual void Delete(IQueryFilter queryFilter)
- {
- InnerDelete(queryFilter);
- }
- private void InnerDelete(IQueryFilter queryFilter)
- {
- string sql = "delete from " + tableName;
- if (queryFilter != null
- && !StringUtils.IsNullOrSpace(queryFilter.WhereString))
- {
- sql += " where " + queryFilter.WhereString;
- adoWorkspace.ExecuteSql(sql, queryFilter.WhereParameter);
- }
- else
- adoWorkspace.ExecuteSql(sql);
- }
-
-
-
-
- public virtual void DeleteByRow(IRow row)
- {
- if (row == null)
- {
- InnerDelete(null);
- return;
- }
- if (row.IsNew)
- {
- IQueryFilter queryFilter = RowToQueryFilter(row);
- InnerDelete(queryFilter);
- }
- else
- {
- IQueryFilter queryFilter = Tofly.Data.Util.QueryFilterConverter.EntityBaseToIQueryFilter(row, this);
- InnerDelete(queryFilter);
- }
- }
-
-
-
-
-
- public virtual void Update(IUpdateFilter updateFilter)
- {
- if (updateFilter == null || StringUtils.IsNullOrSpace(updateFilter.SetFields))
- return;
- string sql = UpdateFilter.ConvertToSql(this, updateFilter);
- adoWorkspace.ExecuteSql(sql, updateFilter.WhereParameter);
- }
-
-
-
-
- public void DirectUpdate(IUpdateFilter updateFilter)
- {
- throw new NotImplementedException();
- }
- #endregion
- #region 扩展方法
-
-
-
-
- public string ToConnectionString()
- {
- return adoWorkspace.ToConnectionString() + "," + tableName;
- }
- #endregion
- #region IDisposable
- private bool disposed = false;
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- private void Dispose(bool disposing)
- {
- if (!this.disposed)
- {
- }
- disposed = true;
- }
- ~TableClass()
- {
- Dispose(false);
- }
- #endregion
- }
- }
|