using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using Ant.Frame; using Ant.Data; namespace Ant.ORM { class OleDbQueryCommandBuilder : QueryCommandBuilder { public override QueryCommand GetQueryCommand() { QueryCommand cmd = null; EntityPersistType str = (!object.Equals(PersistType, null)) ? PersistType : Md.PersistType; switch (str) { case EntityPersistType.Save: cmd = ParserInsertCommand(); break; case EntityPersistType.Update: cmd = ParserUpdateCommand(); break; case EntityPersistType.Delete: cmd = ParserDeleteCommand(); break; case EntityPersistType.Query: cmd = ParserSelectCommand(); break; case EntityPersistType.Sum: cmd = ParserSumCommand(); break; } return cmd; } /// /// ½âÎöInsert SQL /// /// private QueryCommand ParserInsertCommand() { QueryCommand qc = new QueryCommand(); //StringBuilder sql = new StringBuilder(); //sql.AppendFormat("INSERT INTO [{0}]",Md.FiledMeta.TableName); //List columns = new List(); //List param = new List(); //List value = new List(); //foreach (string key in Fields.Keys) //{ // if (!Md.FiledMeta.FieldMeteDatas[key].IsAutoincrement) // { // columns.Add(string.Format("[{0}]", Md.FiledMeta.FieldMeteDatas[key].ColumnName)); // param.Add("@" + Md.FiledMeta.FieldMeteDatas[key].ColumnName); // QueryParameter parameter = new QueryParameter(); // parameter.ParameterName = "@" + Md.FiledMeta.FieldMeteDatas[key].ColumnName; // parameter.Value = Fields[key]; // qc.Parameters.Add(parameter); // value.Add(string.Format("'{0}'", Fields[key].ToString())); // } //} ////sql.AppendFormat("({0}) VALUES({1})", string.Join(",", columns.ToArray()), string.Join(",", param.ToArray())); //sql.AppendFormat("({0}) VALUES({1})", string.Join(",", columns.ToArray()), string.Join(",", param.ToArray())); //qc.CommandText = sql.ToString(); return qc; } private QueryCommand ParserUpdateCommand() { QueryCommand qc = new QueryCommand(); //StringBuilder sql = new StringBuilder(); //sql.AppendFormat("UPDATE [{0}] SET ", Md.FiledMeta.TableName); //List updateColumns = new List(); //List condition = new List(); //foreach (string key in Fields.Keys) //{ // if (!Md.FiledMeta.FieldMeteDatas[key].IsPrimaryKey) // { // updateColumns.Add(string.Format("[{0}]=@{0}", Md.FiledMeta.FieldMeteDatas[key].ColumnName)); // qc.Parameters.Add("@" + Md.FiledMeta.FieldMeteDatas[key].ColumnName, Fields[key]); // } //} //foreach (string key in Fields.Keys) //{ // if (Md.FiledMeta.FieldMeteDatas[key].IsPrimaryKey) // { // condition.Add(string.Format("[{0}]=@{0}", Md.FiledMeta.FieldMeteDatas[key].ColumnName)); // qc.Parameters.Add("@" + Md.FiledMeta.FieldMeteDatas[key].ColumnName, Fields[key]); // } //} //sql.Append(string.Join(",", updateColumns.ToArray())).Append(" WHERE ").Append(string.Join(" AND ", condition.ToArray())); //qc.CommandText = sql.ToString(); return qc; } private QueryCommand ParserDeleteCommand() { QueryCommand qc = new QueryCommand(); StringBuilder sql = new StringBuilder(); //sql.AppendFormat("DELETE FROM [{0}]", Md.FiledMeta.TableName); //List primaryKeys = new List(); //foreach (DataFieldMetaData df in Md.FiledMeta.FieldMeteDatas.Values) //{ // if (df.IsPrimaryKey) // { // primaryKeys.Add(string.Format("[{0}]=@{0}", df.ColumnName)); // qc.Parameters.Add("@" + df.ColumnName, df.ColumnType, Fields[df.PropertyName]); // } //} //sql.AppendFormat("WHERE {0}", string.Join(" AND ", primaryKeys.ToArray())); //qc.CommandText = sql.ToString(); return qc; } private QueryCommand ParserSelectCommand() { QueryCommand qc = new QueryCommand(); //StringBuilder sql = new StringBuilder(); //List columns = new List(); //foreach (DataFieldMetaData df in Md.FiledMeta.FieldMeteDatas.Values) //{ // columns.Add(string.Format("[{0}]", df.ColumnName)); //} //sql.AppendFormat("SELECT {0} FROM [{1}]", string.Join(",", columns.ToArray()), Md.FiledMeta.Table.Name); //if (!string.IsNullOrEmpty(Md.WhereSql)) //{ // sql.AppendFormat(" WHERE {0}", Md.WhereSql); //} //qc.CommandText = sql.ToString(); //qc.MaxRecords = PageSize; //qc.StartRecord = PageSize * PageNo; return qc; } private QueryCommand ParserSumCommand() { QueryCommand qc = new QueryCommand(); StringBuilder sql = new StringBuilder(); sql.AppendFormat("SELECT COUNT(*) FROM {0}", Md.FiledMeta.Table.Name); if (!string.IsNullOrEmpty(Md.WhereSql)) { sql.AppendFormat(" WHERE {0}", Md.WhereSql); } qc.CommandText = sql.ToString(); return qc; } /// /// ×ÔÔö³¤ /// /// public string GetLastInsertID() { return "SELECT @@IDENTITY;"; } } }