Example #1
0
        public SqlObjectAccessCommand(SqlDataStore dataStore, Type dynamicType, string cmdText, bool polymorphic, CommandType commandType)
        {
            this.dataStore = dataStore;
            this.cmdText = cmdText;
            this.polymorphic = polymorphic;
            this.dynamicType = dynamicType;
            this.commandType = commandType;

            if(commandType == CommandType.Text){
                command = new SqlDataAccessCommand(dataStore, dataStore.DataStorageManager.CreateQuery(dynamicType, cmdText, polymorphic), commandType);
            } else {
                command = new SqlDataAccessCommand(dataStore, cmdText, commandType);
            }
        }
Example #2
0
 public object Clone()
 {
     SqlObjectAccessCommand cmd = (SqlObjectAccessCommand)this.MemberwiseClone();
     this.command = (SqlDataAccessCommand)command.Clone();
     return cmd;
 }
        /// <summary>
        /// Executes the Data Access Command.
        /// </summary>
        /// <returns></returns>
        public IList Execute(int pageIndex, int pageSize, out int totalCount)
        {
            // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenethowto05.asp

            Debug.WriteLine("Original SQL: " + Command.command.command.CommandText);

            string sql = Command.command.command.CommandText;

            string orderby = ExtractOrderBy(sql);
            if (orderby == null) {
                throw new ApplicationException("A order by clause is required for paging.");
            }

            string countSql = "SELECT COUNT(*) " + ExtractFrom(sql);

            Trace.Write("Check Count");
            SqlDataAccessCommand cmd = new SqlDataAccessCommand(this.Command.dataStore, countSql);
            totalCount = (int)cmd.ExecuteScalar();

            sql = "SELECT * FROM ( SELECT TOP " + Math.Min(pageSize, Math.Max(0,totalCount - pageSize * pageIndex))  + " * FROM ( SELECT TOP " + pageSize * (pageIndex + 1) + " " + ExtractQuery(sql) + " ) AS Top1 ORDER BY " + ReverseOrderBy(orderby) + " ) AS Top2 ORDER BY " + orderby;

            Command.command.command.CommandText = sql;

            Trace.Write("Execute Search");
            return Execute();
        }
Example #4
0
        internal override void Update(object o, TypeMapping typeMapping)
        {
            if(typeMapping.BaseType != null){
                TypeMapping baseTypeMapping = null;
                if((baseTypeMapping = DataStorageManager.GetTypeMapping(typeMapping.BaseType)) == null){
                    throw new DataStoreException("DataStore does not contain storage for " + typeMapping.BaseType.FullName);
                }
                Update(o,baseTypeMapping);
            }

            if ((typeMapping.PrimaryKey != null && typeMapping.MemberMappings.Count > 1) || (typeMapping.PrimaryKey == null && typeMapping.MemberMappings.Count > 0)) {

                SqlDataAccessCommand updateCommand;
                if (typeMapping.UseStoredProcedures) {
                    updateCommand = new SqlDataAccessCommand(this, ((SqlDataStorageManager)this.DataStorageManager).GetUpdateProcedureName(typeMapping), CommandType.StoredProcedure);
                } else {
                    updateCommand = new SqlDataAccessCommand(this, ((SqlDataStorageManager)this.DataStorageManager).GenerateUpdateSql(typeMapping), CommandType.Text);
                }

                foreach (IMemberMapping mapping in typeMapping.MemberMappings) {

                    SqlMemberDbType dbType = (SqlMemberDbType)mapping.MemberDbType;

                    if (dbType.Length == 0) {
                        updateCommand.CreateInputParameter("@" + mapping.ColumnName, dbType.SqlDbType, mapping.GetValue(o));
                    } else {
                        updateCommand.CreateInputParameter("@" + mapping.ColumnName, dbType.SqlDbType, dbType.Length, mapping.GetValue(o));
                    }
                }

                updateCommand.ExecuteNonQuery();
            }
        }
Example #5
0
        internal override void Insert(object o, TypeMapping typeMapping)
        {
            if(typeMapping.BaseType != null){
                TypeMapping baseTypeMapping = null;
                if((baseTypeMapping = DataStorageManager.GetTypeMapping(typeMapping.BaseType)) == null){
                    throw new DataStoreException("DataStore does not contain storage for " + typeMapping.BaseType.FullName);
                }
                Insert(o,baseTypeMapping);
            }

            SqlDataAccessCommand insertCommand;
            if(typeMapping.UseStoredProcedures){
                insertCommand = new SqlDataAccessCommand(this, ((SqlDataStorageManager)this.DataStorageManager).GetInsertProcedureName(typeMapping), CommandType.StoredProcedure);
            } else {
                insertCommand = new SqlDataAccessCommand(this, ((SqlDataStorageManager)this.DataStorageManager).GenerateInsertSql(typeMapping), CommandType.Text);
            }

            IDbDataParameter output = null;
            IMemberMapping outputmapping = null;

            foreach(IMemberMapping mapping in typeMapping.MemberMappings){

                SqlMemberDbType dbType = (SqlMemberDbType)mapping.MemberDbType;

                if(mapping.PrimaryKey && mapping.Identity){
                    output = insertCommand.CreateOutputParameter("@" + mapping.ColumnName, dbType.SqlDbType);
                    outputmapping = mapping;
                } else if(dbType.Length == 0){
                    insertCommand.CreateInputParameter("@" + mapping.ColumnName, dbType.SqlDbType, mapping.GetValue(o));
                } else {
                    insertCommand.CreateInputParameter("@" + mapping.ColumnName, dbType.SqlDbType, dbType.Length, mapping.GetValue(o));
                }
            }

            insertCommand.ExecuteNonQuery();

            if(output!=null){
                outputmapping.SetValue(o,output.Value);
            }
        }
Example #6
0
        public void Delete(TypeMapping typeMapping, object primaryKey, bool cascade)
        {
            foreach(Type subClass in typeMapping.SubClasses){
                Delete(this.DataStorageManager.GetTypeMapping(subClass), primaryKey, false);
            }

            SqlDataAccessCommand deleteCommand;
            if(typeMapping.UseStoredProcedures){
                deleteCommand = new SqlDataAccessCommand(this, ((SqlDataStorageManager)this.DataStorageManager).GetDeleteProcedureName(typeMapping), CommandType.StoredProcedure);
            } else {
                deleteCommand = new SqlDataAccessCommand(this, ((SqlDataStorageManager)this.DataStorageManager).GenerateDeleteSql(typeMapping), CommandType.Text);
            }

            IMemberMapping mapping = typeMapping.PrimaryKey;
            SqlMemberDbType dbType = (SqlMemberDbType)mapping.MemberDbType;

            if(dbType.Length == 0){
                deleteCommand.CreateInputParameter("@" + mapping.ColumnName, dbType.SqlDbType, primaryKey);
            } else {
                deleteCommand.CreateInputParameter("@" + mapping.ColumnName, dbType.SqlDbType, dbType.Length, primaryKey);
            }

            deleteCommand.ExecuteNonQuery();

            if(cascade){
                if(typeMapping.BaseType != null){
                    TypeMapping baseTypeMapping = null;
                    if((baseTypeMapping = DataStorageManager.GetTypeMapping(typeMapping.BaseType)) == null){
                        throw new DataStoreException("DataStore does not contain storage for " + typeMapping.BaseType.FullName);
                    }
                    Delete(baseTypeMapping, primaryKey, true);
                }
            }
        }