Ejemplo n.º 1
0
        private IDbDataParameter[] SetupCommand(IDbCommand cmd,
                                                object[] parameters, int[] outputs, StringBuilder buf)
        {
            int size = (outputs == null) ? 0 : outputs.Length;

            IDbDataParameter[] outputParams = new IDbDataParameter[size];
            int j = 0;

            if (parameters != null && parameters.Length > 0)
            {
                buf.Append(" ");
                for (int i = 0; i < parameters.Length; i++)
                {
                    int x = i + 1;
                    if (i > 0)
                    {
                        buf.Append(",");
                    }
                    buf.Append("@").Append(x);

                    IDbDataParameter p = cmd.CreateParameter();
                    p.ParameterName = string.Format("@{0}", x);
                    SqlUtils.PrepParam(p, parameters[i]);
                    if (outputs != null && Array.IndexOf <int>(outputs, i) > -1)
                    {
                        buf.Append(" output");
                        p.Direction       = ParameterDirection.InputOutput;
                        outputParams[j++] = p;
                    }
                    cmd.Parameters.Add(p);
                }
            }
            return(outputParams);
        }
Ejemplo n.º 2
0
        public virtual int Update(IDb db, ICollection items)
        {
            ErrorIfSPResult();
            int        result = 0;
            string     sql    = GetUpdateSql();
            IDbCommand cmd    = null;

            FireTriggers(items, new TriggerEventArgs(db, Timing.BeforeUpdate));
            try
            {
                cmd             = db.Connection.CreateCommand();
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.Transaction = db.Transaction;
                foreach (SqlColumn column in columns)
                {       // add parameters
                    if (column.IsReadable && !(column.IsID && !column.IsPK))
                    {
                        string           prefix = column.IsPK ? ":pk" : ":";
                        IDbDataParameter p      = cmd.CreateParameter();
                        p.ParameterName = string.Format("{0}{1}", prefix, column.Ordinal);
                        SqlUtils.PrepParam(p, column.DataType);
                        cmd.Parameters.Add(p);
                    }
                }
                cmd.Prepare();
                foreach (object item in items)
                {
                    if (item != null)
                    {
                        foreach (SqlColumn column in columns)
                        {       // assign values to parameters
                            if (column.IsReadable && !(column.IsID && !column.IsPK))
                            {
                                string           prefix = column.IsPK ? ":pk" : ":";
                                string           pname  = string.Format("{0}{1}", prefix, column.Ordinal);
                                IDbDataParameter p      = (IDbDataParameter)cmd.Parameters[pname];
                                column.SetParameterValue(p, item);
                            }
                        }

                        TraceObject.Instance.TraceCommand(cmd);

                        result += cmd.ExecuteNonQuery();
                    }
                }
            }
            finally
            {
                if (cmd != null)
                {
                    cmd.Dispose();
                    cmd = null;
                }
            }
            FireTriggers(items, new TriggerEventArgs(db, Timing.AfterUpdate));
            return(result);
        }
Ejemplo n.º 3
0
        public override void SetParameters(IDbCommand cmd)
        {
            IList values = (IList)Value;

            for (int i = 0; i < values.Count; i++)
            {
                int j = index + i;
                IDbDataParameter p = cmd.CreateParameter();
                p.ParameterName = string.Format(":{0}", j);
                SqlUtils.PrepParam(p, values[i]);
                cmd.Parameters.Add(p);
            }
        }
Ejemplo n.º 4
0
 public virtual void SetParameters(IDbCommand cmd)
 {
     if (HasQuery)
     {
         query.SetParameters(cmd);
     }
     else
     {
         string           pn = string.Format("@{0}", index);
         IDbDataParameter p  = cmd.CreateParameter();
         p.ParameterName = pn;
         SqlUtils.PrepParam(p, val);
         cmd.Parameters.Add(p);
     }
 }
Ejemplo n.º 5
0
        public virtual void Exec(IDb db, string procName, object[] parameters, IList list)
        {
            int         len    = (parameters == null) ? 0 : parameters.Length;
            string      sql    = GetExecSql(procName, len);
            IDbCommand  cmd    = null;
            IDataReader reader = null;

            try
            {
                cmd             = db.Connection.CreateCommand();
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.Transaction = db.Transaction;
                for (int i = 0; i < len; i++)
                {
                    int j = i + 1;
                    IDbDataParameter p = cmd.CreateParameter();
                    p.ParameterName = string.Format(":{0}", j);
                    SqlUtils.PrepParam(p, parameters[i]);
                    cmd.Parameters.Add(p);
                }

                TraceObject.Instance.TraceCommand(cmd);

                reader = cmd.ExecuteReader();
                FillByName(reader, list);
            }
            finally
            {
                if (reader != null)
                {
                    if (!reader.IsClosed)
                    {
                        reader.Close();
                    }
                    reader.Dispose();
                    reader = null;
                }
                if (cmd != null)
                {
                    cmd.Dispose();
                    cmd = null;
                }
            }
            FireTriggers(list, new TriggerEventArgs(db, Timing.AfterActivate));
        }
Ejemplo n.º 6
0
        public virtual int Insert(IDb db, ICollection items)
        {
            ErrorIfSPResult();
            int              result = 0;
            string           sql    = GetInsertSql();
            IDbCommand       cmd    = null;
            IDbDataParameter idP    = null;

            FireTriggers(items, new TriggerEventArgs(db, Timing.BeforeInsert));
            try
            {
                cmd             = db.Connection.CreateCommand();
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                cmd.Transaction = db.Transaction;
                foreach (SqlColumn column in columns)
                {       // add parameters
                    if (column.IsReadable && !column.IsID)
                    {
                        IDbDataParameter p = cmd.CreateParameter();
                        p.ParameterName = string.Format(":{0}", column.Ordinal);
                        SqlUtils.PrepParam(p, column.DataType);
                        cmd.Parameters.Add(p);
                    }
                }
                if (identity != null)
                {       // add output parameter for identity column
                    idP = cmd.CreateParameter();
                    idP.ParameterName = ":id";
                    SqlUtils.PrepParam(idP, identity.DataType);
                    idP.Direction = ParameterDirection.Output;
                    cmd.Parameters.Add(idP);
                }
                cmd.Prepare();
                foreach (object item in items)
                {
                    if (item == null)
                    {
                        continue;
                    }
                    foreach (SqlColumn column in columns)
                    {   // assign values to all parameters
                        if (column.IsReadable && !column.IsID)
                        {
                            string           pname = string.Format(":{0}", column.Ordinal);
                            IDbDataParameter p     = (IDbDataParameter)cmd.Parameters[pname];
                            column.SetParameterValue(p, item);
                        }
                    }

                    TraceObject.Instance.TraceCommand(cmd);

                    result += cmd.ExecuteNonQuery();
                    if (identity != null)
                    {   // write generated identity value back into the object
                        identity.SetValue(item, idP.Value);
                    }
                }
            }
            finally
            {
                if (cmd != null)
                {
                    cmd.Dispose();
                    cmd = null;
                }
            }
            FireTriggers(items, new TriggerEventArgs(db, Timing.AfterInsert));
            return(result);
        }