Ejemplo n.º 1
0
        /// <summary>
        /// 执行sp
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="connstr"></param>
        /// <param name="spname"></param>
        /// <param name="isreturnds"></param>
        /// <param name="dbp"></param>
        /// <returns></returns>
        protected virtual UnitDataCollection ExcuteSP <T>(string connstr, string spname, bool isreturnds, DBOParameterCollection dbp) where T : ADBAccess, IResourceEntity
        {
            T dao = GetDao <T>(connstr, null);

            try
            {
                UnitDataCollection rtn   = new UnitDataCollection();
                DBDataCollection   dbrtn = dao.ExcuteProcedure(ComFunc.nvl(spname), isreturnds, ref dbp);
                if (dbrtn.IsSuccess)
                {
                    foreach (string s in dbrtn.Keys)
                    {
                        if (dbrtn[s] is DataSetStd)
                        {
                            rtn.QueryDatas = dbrtn.ReturnDataSet;
                        }
                        else
                        {
                            rtn.SetValue(s, dbrtn[s]);
                        }
                    }
                }
                return(rtn);
            }
            finally
            {
                dao.Close();
            }
        }
        public override DBDataCollection ExcuteProcedure(string sp_name, bool isReturnDataSet, ref DBOParameterCollection dbp)
        {
            DBDataCollection rtn = new DBDataCollection();

            rtn.IsSuccess = false;

            DataSetStd    ds = new DataSetStd();
            NpgsqlCommand dc = null;//new SqlCommand(p.StoreProcureName, this.sqlconn);

            if (this._s == DBStatus.Begin_Trans)
            {
                dc = new NpgsqlCommand(sp_name, this.conn, this.tran);
            }
            else
            {
                dc = new NpgsqlCommand(sp_name, this.conn);
            }
            //dc.CommandTimeout = 90;
            dc.CommandType    = CommandType.StoredProcedure;
            dc.CommandTimeout = CommandTimeOut;
            FillParametersToCommand(dc, dbp);
            NpgsqlDataReader ddr = null;

            try
            {
                if (isReturnDataSet)
                {
                    ddr = dc.ExecuteReader();
                    ds  = DataSetStd.FillData(ddr);
                    rtn.ReturnDataSet = ds;
                }
                else
                {
                    dc.ExecuteNonQuery();
                }
                //獲取返回值
                foreach (SqlParameter sp in dc.Parameters)
                {
                    if (sp.Direction == ParameterDirection.Output || sp.Direction == ParameterDirection.InputOutput || sp.Direction == ParameterDirection.ReturnValue)
                    {
                        rtn.SetValue(sp.ParameterName.Replace(ParameterFlagChar, ""), sp.Value);
                    }
                }

                rtn.IsSuccess = true;
            }
            finally
            {
                if (ddr != null)
                {
                    ddr.Close();
                    ddr.Dispose();
                }
                dc.Dispose();
                dc = null;
            }

            return(rtn);
        }
Ejemplo n.º 3
0
        public DataCollection DoOperate(ParameterStd p)
        {
            string        flag   = p.GetValue <string>("_unit_action_flag_");
            UnitParameter up     = (UnitParameter)p;
            T             t      = (T)Activator.CreateInstance(typeof(T), true);
            var           sqlobj = t.GetSqlFunc(flag)(up);

            if (!(sqlobj is FrameDLRObject))
            {
                throw new TypeRequiredException("需要的动态数据对象类型应该为FrameDLRObject");
            }
            IDBAccessInfo          dba = up.Dao;
            DBOParameterCollection dbc = up.SPParameter;
            UnitDataCollection     rtn = new UnitDataCollection();

            if (dba is ADBAccess)
            {
                bool             isrturnds = sqlobj.isreturnds != null ? sqlobj.isreturnds : false;
                DBDataCollection dbrtn     = ((ADBAccess)dba).ExcuteProcedure(ComFunc.nvl(sqlobj.spname), isrturnds, ref dbc);
                if (dbrtn.IsSuccess)
                {
                    foreach (string s in dbrtn.Keys)
                    {
                        if (dbrtn[s] is DataSetStd)
                        {
                            rtn.QueryDatas = dbrtn.ReturnDataSet;
                        }
                        else
                        {
                            rtn.SetValue(s, dbrtn[s]);
                        }
                    }
                }
            }
            return(rtn);
        }