//构造Delete Sql语句 private void GetSqlDelete() { //Add 'DELETE FROM' clause to the select statement this.AddSqlClause("DELETE FROM "); this.AddSqlClause(ThisClassMap.RelationalDatabase.QuotationMarksStart + ThisClassMap.GetAttributeMap(0).Column.Table.Name + ThisClassMap.RelationalDatabase.QuotationMarksEnd); //Add 'WHERE key= "some value"' to the select statement this._deleteClause = this.sql; this.AddSqlClause(" WHERE 1=1 "); AttributeMap attrMap; ClassMap thisClassMap = this.ThisClassMap; for (int i = 0; i < thisClassMap.GetKeySize(); i++) { attrMap = thisClassMap.GetKeyAttributeMap(i); //该列是否Primary Key if (attrMap.Column.KeyType == ColumnKeyTypes.PrimaryKey) { this.partForObject += " AND " + this.clsMap.GetFullyQualifiedName(attrMap.Column.Name) + "=" + this.clsMap.RelationalDatabase.GetStringParameter(attrMap.Name, i); } } //tintown add by 2005-3-21 添加timestamp功能 if (ThisClassMap.TimestampAttribute != null) { this.AddSqlClause(" AND " + this.clsMap.GetFullyQualifiedName(ThisClassMap.TimestampAttribute.Column.Name) + "="); this.AddSqlClause(ThisClassMap.RelationalDatabase.GetStringParameter(ThisClassMap.TimestampAttribute.Column.Name, ThisClassMap.GetKeySize())); } }
//构造Sql语句前部分 private void GetSqlSelect() { this.AddSqlClause("SELECT "); //Add clauses for all attributes. Don't add "," before the first attribute bool isFirst = true; ClassMap clsMap = thisClassMap; AttributeMap attrMap; int size; string stemp = " AS " + clsMap.RelationalDatabase.QuotationMarksStart; do { //attrMap = clsMap.GetAttributeMap (0); size = clsMap.SelfClassAttributes.Count; for (int i = 0; i < size; i++) { attrMap = (AttributeMap)clsMap.SelfClassAttributes[i]; this.AddSqlClause((isFirst?"":",") + this.clsMap.GetFullyQualifiedName(attrMap.Column.Name)); this.AddSqlClause(stemp + attrMap.Name + clsMap.RelationalDatabase.QuotationMarksEnd); isFirst = false; } clsMap = clsMap.SuperClass; }while(clsMap != null); //Add the FROM clause to the statement this.AddSqlClause(" FROM " + ThisClassMap.RelationalDatabase.QuotationMarksStart + thisClassMap.Table.Name + ThisClassMap.RelationalDatabase.QuotationMarksEnd); if (ThisClassMap.RelationalDatabase.Vendor == DatabaseVendor.MsAccess || ThisClassMap.RelationalDatabase.Vendor == DatabaseVendor.MsSqlServer) { this.AddSqlClause(" With(nolock)"); } isFirst = true; clsMap = thisClassMap.SuperClass; while (clsMap != null) { this.AddSqlClause("," + clsMap.Table.Name); clsMap = clsMap.SuperClass; } while (clsMap != null) { ; } //此语句为SELECT的前部 this._selecFromClause = this.sql; //Add WHERE Clause to the statement this.AddSqlClause(" WHERE 1=1 "); for (int i = 0; i < thisClassMap.GetKeySize(); i++) { attrMap = thisClassMap.GetKeyAttributeMap(i); //该列是否Primary Key if (attrMap.Column.KeyType == ColumnKeyTypes.PrimaryKey) { this.AddSqlClause(" AND " + this.clsMap.GetFullyQualifiedName(attrMap.Column.Name) + "=" + base.clsMap.RelationalDatabase.GetStringParameter(attrMap.Name, i)); } } //Add WHERE Clause table.column=superclass_table.column to the selectStatement clsMap = this.clsMap; isFirst = true; do { size = clsMap.GetReferenceSize(); for (int i = 0; i < size; i++) { attrMap = clsMap.GetReferenceAttributeMap(i); if (isFirst) { _stringForInherit = this.clsMap.GetFullyQualifiedName(attrMap.Column.Name) + "=" + this.clsMap.GetFullyQualifiedName(attrMap.Reference.Column.Name); isFirst = false; } else { _stringForInherit += " AND " + this.clsMap.GetFullyQualifiedName(attrMap.Column.Name) + "=" + this.clsMap.GetFullyQualifiedName(attrMap.Reference.Column.Name); } } if (this._stringForInherit != null) { this.AddSqlClause(" AND " + this._stringForInherit); } clsMap = clsMap.SuperClass; }while (clsMap != null); }