예제 #1
0
        internal override void AddCustomePara(string paraName, ParaType paraType)
        {
            OracleParameter para = new OracleParameter();
            para.ParameterName = paraName;
            switch (paraType)
            {
                case ParaType.Cursor:
                case ParaType.OutPut:
                    if (paraType == ParaType.Cursor)
                    {
                        para.OracleType = OracleType.Cursor;
                    }
                    else
                    {
                        para.OracleType = OracleType.Int32;
                    }
                    para.Direction = ParameterDirection.Output;
                    break;
                case ParaType.ReturnValue:
                    para.OracleType = OracleType.Int32;
                    para.Direction = ParameterDirection.ReturnValue;
                    break;

            }
            Com.Parameters.Add(para);
        }
예제 #2
0
파일: MsSqlDal.cs 프로젝트: ImQdf/cyqdata
 internal override void AddCustomePara(string paraName, ParaType paraType, object value, string typeName)
 {
     if (Com.Parameters.Contains(paraName))
     {
         return;
     }
     switch (paraType)
     {
     case ParaType.OutPut:
     case ParaType.ReturnValue:
     case ParaType.Structured:
         SqlParameter para = new SqlParameter();
         para.ParameterName = paraName;
         if (paraType == ParaType.Structured)
         {
             para.SqlDbType = SqlDbType.Structured;
             para.TypeName  = typeName;
             para.Value     = value;
         }
         else if (paraType == ParaType.OutPut)
         {
             para.SqlDbType = SqlDbType.NVarChar;
             para.Size      = 2000;
             para.Direction = ParameterDirection.Output;
         }
         else
         {
             para.SqlDbType = SqlDbType.Int;
             para.Direction = ParameterDirection.ReturnValue;
         }
         Com.Parameters.Add(para);
         break;
     }
 }
예제 #3
0
        internal override void AddCustomePara(string paraName, ParaType paraType, object value)
        {
            if (Com.Parameters.Contains(paraName))
            {
                return;
            }
            switch (paraType)
            {
                case ParaType.OutPut:
                case ParaType.ReturnValue:
                    SqlParameter para = new SqlParameter();
                    para.ParameterName = paraName;

                    if (paraType == ParaType.OutPut)
                    {
                        para.SqlDbType = SqlDbType.NVarChar;
                        para.Size = 2000;
                        para.Direction = ParameterDirection.Output;
                    }
                    else
                    {
                        para.SqlDbType = SqlDbType.Int;
                        para.Direction = ParameterDirection.ReturnValue;
                    }
                    Com.Parameters.Add(para);
                    break;
            }
        }
예제 #4
0
        /// <summary>
        /// Приводит строку к соответствующему идентификатору <see cref="Methods"/>
        /// </summary>
        /// <param name="input">Входная строка</param>
        /// <returns>Соответствующий идентификатор</returns>
        static Ident GetMethod(string input)
        {
            CleanIdent(ref input);
            string[] inputs      = new Regex("[ (]+").Split(input);   //разделяем входные данные
            string   _Type       = inputs[0];                         //тип данных
            string   Name        = inputs[1];                         //имя
            Regex    ParamsRegex = new Regex("[(][a-zA-Z 0-9,]+[)]"); //рег. выражение, определающее параметры
            Match    Params      = ParamsRegex.Match(input);          //получаем параметры (Match)
            string   StParams    = Params.Value;                      //получаем параметры (string)

            //если что-то ещё подходит под описание
            if (Params.NextMatch().Success)
            {
                throw new ArgumentException("Неожиданно большое количество скобок");
            }
            Regex        ParamRegex = new Regex("([(]|[,])[ ]*[a-z]+[ ]+[a-zA-Z0-9]+[ ]*([,]|[)])"); //рег. выражение для простых параметров
            Match        MatchParam = ParamRegex.Match(StParams);                                    //получаем параметры по одному
            List <Param> ParamList  = new List <Param>();                                            //список получившихся параметров

            while (MatchParam.Success)                                                               //до тех пора пока получаем совпадающие фрагменты
            {
                string Param = MatchParam.Value;
                while (Param[0] == ' ' || Param[0] == '(' || Param[0] == ',')
                {
                    Param = Param.Substring(1);
                }
                while (Param[Param.Length - 1] == ' ' || Param[Param.Length - 1] == ',' ||
                       Param[Param.Length - 1] == ')')
                {
                    Param = Param.Substring(0, Param.Length - 1);
                }
                string[] tempParam = new Regex("[ ]+").Split(Param);               //разделяем строку
                Type     type      = GetType(tempParam[0]);                        //тип данных метода
                ParamList.Add(new Param(type, ParaType.param_val));                //добавляем получившийся параметр
                MatchParam = MatchParam.NextMatch();                               //переходим к следующему фрагменту
            }
            ParamRegex = new Regex("((ref[ ]+)|(out[ ]+))[a-z]+[ ]+[A-Za-z0-9]+"); //рег. выражение для out и ref
            MatchParam = ParamRegex.Match(StParams);
            while (MatchParam.Success)
            {
                string Param = MatchParam.Value;
                while (Param[0] == ' ')
                {
                    Param = Param.Substring(1);
                }
                while (Param[Param.Length - 1] == ' ' || Param[Param.Length - 1] == ',')
                {
                    Param = Param.Substring(0, Param.Length - 1);
                }
                string[] tempParam = new Regex("[ ]+").Split(Param);
                ParaType paraType  = GetParaType(tempParam[0]);
                Type     type      = GetType(tempParam[1]);
                ParamList.Add(new Param(type, paraType));
                MatchParam = MatchParam.NextMatch();
            }

            return(new Methods(Name, GetType(_Type), ParamList.ToArray()));
        }
예제 #5
0
 internal override void AddCustomePara(string paraName, ParaType paraType, object value)
 {
     if (IsUseOdpNet)
     {
         AddParaForOdpNet(paraName, paraType, value);
     }
     else
     {
         AddParaForOracleClient(paraName, paraType, value);
     }
 }
예제 #6
0
파일: DbBase.cs 프로젝트: xuxiaolei/cyqdata
        internal virtual void AddCustomePara(string paraName, ParaType paraType, object value, string typeName)
        {
            switch (paraType)
            {

                case ParaType.OutPut:
                    AddParameters(paraName, null, DbType.String, 2000, ParameterDirection.Output);
                    break;
                case ParaType.InputOutput:
                    AddParameters(paraName, null, DbType.String, 2000, ParameterDirection.InputOutput);
                    break;
                case ParaType.ReturnValue:
                    AddParameters(paraName, null, DbType.Int32, 32, ParameterDirection.ReturnValue);
                    break;
            }
        }
예제 #7
0
        private void AddParaForOdpNet(string paraName, ParaType paraType, object value)
        {
            Assembly ass = GetAssembly();
            //工厂方法理解点
            DbParameter para = ass.CreateInstance("Oracle." + ManagedName + "DataAccess.Client.OracleParameter") as DbParameter;

            para.ParameterName = paraName;
            switch (paraType)
            {
            case ParaType.Cursor:
            case ParaType.OutPut:
                if (paraType == ParaType.Cursor)
                {
                    para.GetType().GetProperty("OracleDbType").SetValue(para, OracleDbType.RefCursor, null);
                }
                else
                {
                    para.DbType = DbType.String;
                    para.Size   = 4000;
                }
                para.Direction = ParameterDirection.Output;
                value          = DBNull.Value;
                break;

            case ParaType.ReturnValue:
                para.DbType    = DbType.Int32;
                para.Direction = ParameterDirection.ReturnValue;
                value          = DBNull.Value;
                break;

            case ParaType.CLOB:
            case ParaType.NCLOB:
                para.GetType().GetProperty("OracleDbType").SetValue(para, paraType == ParaType.CLOB ? OracleDbType.Clob : OracleDbType.NClob, null);
                para.Direction = ParameterDirection.Input;
                if (value != null)
                {
                    para.Value = value;
                }
                break;
            }
            Com.Parameters.Add(para);
        }
예제 #8
0
        private void AddParaForOracleClient(string paraName, ParaType paraType, object value)
        {
            if (Com.Parameters.Contains(paraName))
            {
                return;
            }
            OracleParameter para = new OracleParameter();

            para.ParameterName = paraName;
            switch (paraType)
            {
            case ParaType.Cursor:
            case ParaType.OutPut:
                if (paraType == ParaType.Cursor)
                {
                    para.OracleType = OracleType.Cursor;
                }
                else
                {
                    para.OracleType = OracleType.NVarChar;
                    para.Size       = 4000;
                }
                para.Direction = ParameterDirection.Output;
                break;

            case ParaType.ReturnValue:
                para.OracleType = OracleType.Int32;
                para.Direction  = ParameterDirection.ReturnValue;
                break;

            case ParaType.CLOB:
            case ParaType.NCLOB:
                para.OracleType = paraType == ParaType.CLOB ? OracleType.Clob : OracleType.NClob;
                para.Direction  = ParameterDirection.Input;
                if (value != null)
                {
                    para.Value = value;
                }
                break;
            }
            Com.Parameters.Add(para);
        }
예제 #9
0
파일: SQLHelper.cs 프로젝트: Angliy/Common
 internal override void AddCustomePara(string paraName, ParaType paraType)
 {
     switch (paraType)
     {
         case ParaType.OutPut:
         case ParaType.ReturnValue:
             SqlParameter para = new SqlParameter();
             para.ParameterName = paraName;
             para.SqlDbType = SqlDbType.Int;
             if (paraType == ParaType.OutPut)
             {
                 para.Direction = ParameterDirection.Output;
             }
             else
             {
                 para.Direction = ParameterDirection.ReturnValue;
             }
             Com.Parameters.Add(para);
             break;
     }
 }
예제 #10
0
 public Parameter(object para, Type dataType, ParaType pType)
 {
     Para     = para;
     ParaType = pType;
     DataType = dataType;
 }
예제 #11
0
 private void AddParaForOracleClient(string paraName, ParaType paraType, object value)
 {
     if (Com.Parameters.Contains(paraName)) { return; }
     OracleParameter para = new OracleParameter();
     para.ParameterName = paraName;
     switch (paraType)
     {
         case ParaType.Cursor:
         case ParaType.OutPut:
             if (paraType == ParaType.Cursor)
             {
                 para.OracleType = OracleType.Cursor;
             }
             else
             {
                 para.OracleType = OracleType.NVarChar;
                 para.Size = 4000;
             }
             para.Direction = ParameterDirection.Output;
             break;
         case ParaType.ReturnValue:
             para.OracleType = OracleType.Int32;
             para.Direction = ParameterDirection.ReturnValue;
             break;
         case ParaType.CLOB:
         case ParaType.NCLOB:
             para.OracleType = paraType == ParaType.CLOB ? OracleType.Clob : OracleType.NClob;
             para.Direction = ParameterDirection.Input;
             if (value != null)
             {
                 para.Value = value;
             }
             break;
     }
     Com.Parameters.Add(para);
 }
예제 #12
0
 private void AddParaForOdpNet(string paraName, ParaType paraType, object value)
 {
     Assembly ass = GetAssembly();
     DbParameter para = ass.CreateInstance("Oracle." + ManagedName + "DataAccess.Client.OracleParameter") as DbParameter;
     para.ParameterName = paraName;
     switch (paraType)
     {
         case ParaType.Cursor:
         case ParaType.OutPut:
             if (paraType == ParaType.Cursor)
             {
                 para.GetType().GetProperty("OracleDbType").SetValue(para, OracleDbType.RefCursor, null);
             }
             else
             {
                 para.DbType = DbType.String;
                 para.Size = 4000;
             }
             para.Direction = ParameterDirection.Output;
             value = DBNull.Value;
             break;
         case ParaType.ReturnValue:
             para.DbType = DbType.Int32;
             para.Direction = ParameterDirection.ReturnValue;
             value = DBNull.Value;
             break;
         case ParaType.CLOB:
         case ParaType.NCLOB:
             para.GetType().GetProperty("OracleDbType").SetValue(para, paraType == ParaType.CLOB ? OracleDbType.Clob : OracleDbType.NClob, null);
             para.Direction = ParameterDirection.Input;
             if (value != null)
             {
                 para.Value = value;
             }
             break;
     }
     Com.Parameters.Add(para);
 }
예제 #13
0
 internal override void AddCustomePara(string paraName, ParaType paraType, object value)
 {
     if (IsUseOdpNet)
     {
         AddParaForOdpNet(paraName, paraType, value);
     }
     else
     {
         AddParaForOracleClient(paraName, paraType, value);
     }
 }
예제 #14
0
    private object DBPara(string strData, ParaType PType)
    {
        object objResult = null;
        strData = strData.TrimEnd();
        if (strData == "")
        {
            objResult = DBNull.Value;
        }
        else
        {
            if (PType == ParaType.Varchar2)
            {
                objResult = strData;

            }
            else
            {
                if (PType == ParaType.Number)
                {
                    decimal decResult;
                    if (decimal.TryParse(strData, out decResult) == true)
                        objResult = decResult;
                    else
                        objResult = DBNull.Value;
                }
                else if (PType == ParaType.Date)
                {
                    //日期有兩種格式
                    //yyyy/MM/dd HH:mm:ss 19碼
                    //yyyy/MM/dd 10碼
                    string strFormat = string.Empty;
                    if (strData.Length == 19)
                    {
                        strFormat = "yyyy/MM/dd HH:mm:ss";
                    }
                    else if (strData.Length == 10)
                    {
                        strFormat = "yyyy/MM/dd";
                    }
                    objResult = DateTime.ParseExact(strData, strFormat, CultureInfo.InvariantCulture);
                }
            }
        }
        return objResult;
    }
예제 #15
0
파일: DbBase.cs 프로젝트: Angliy/Common
 internal virtual void AddCustomePara(string paraName, ParaType paraType)
 {
 }
예제 #16
0
파일: Param.cs 프로젝트: ankokovin/KPO1
 /// <summary>
 /// Конструктор параметра
 /// </summary>
 /// <param name="type">Тип данных параметра</param>
 /// <param name="paraType">Способ передачи параметра</param>
 public Param(Type type, ParaType paraType)
 {
     _type    = type;
     ParaType = paraType;
 }
예제 #17
0
 /// <param name="typeName">MSSQL The name of the user-defined table type<para>MSSQL的用户定义表类型的名称</para></param>
 public MProc SetCustom(object paraName, ParaType paraType, object value, string typeName)
 {
     dalHelper.AddCustomePara(Convert.ToString(paraName), paraType, value, typeName); return(this);
 }
예제 #18
0
 /// <summary>
 /// <para>Set the stored procedure OutPut, the return value and other special types of parameters</para>
 /// <para>设置存储过程OutPut、返回值等特殊类型参数</para>
 /// </summary>
 public MProc SetCustom(object paraName, ParaType paraType, object value)
 {
     return(SetCustom(paraName, paraType, value, null));
 }
예제 #19
0
파일: DbBase.cs 프로젝트: momin808/cyqdata
 internal virtual void AddCustomePara(string paraName, ParaType paraType, object value, string typeName)
 {
 }
예제 #20
0
파일: Parameter.cs 프로젝트: livvyguo/Gaea
 public Parameter(object para,Type dataType, ParaType pType)
 {
     Para = para;
     ParaType = pType;
     DataType = dataType;
 }
예제 #21
0
 internal virtual void AddCustomePara(string paraName, ParaType paraType, object value)
 {
 }
예제 #22
0
 private object DBPara(string strData, ParaType PType, ParaSQL PSQL)
 {
     object objResult = null;
     strData = strData.TrimEnd();
     if (strData == "")
     {
         objResult = DBNull.Value;
     }
     else
     {
         //PSQL的Like只有在String的型別下有效
         if (PType == ParaType.Varchar2)
         {
             if (PSQL == ParaSQL.Equal)
             {
                 objResult = strData;
             }
             else
             {
                 objResult = "%" + strData + "%";
             }
         }
         else
         {
             if (PType == ParaType.Number)
             {
                 objResult = decimal.Parse(strData);
             }
             else if (PType == ParaType.Date)
             {
                 //日期有兩種格式
                 //yyyy/MM/dd HH:mm:ss 19碼
                 //yyyy/MM/dd 10碼
                 string strFormat = string.Empty;
                 if (strData.Length == 19)
                 {
                     strFormat = "yyyy/MM/dd HH:mm:ss";
                 }
                 else if (strData.Length == 10)
                 {
                     strFormat = "yyyy/MM/dd";
                 }
                 objResult = DateTime.ParseExact(strData, strFormat, CultureInfo.InvariantCulture);
             }
         }
     }
     return objResult;
 }
예제 #23
0
파일: MProc.cs 프로젝트: xiaopohou/cyqdata
 /// <summary>
 /// 设置特殊自定义参数
 /// </summary>
 public MProc SetCustom(object paraName, ParaType paraType)
 {
     dalHelper.AddCustomePara(Convert.ToString(paraName), paraType, null); return(this);
 }