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); }
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; } }
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; } }
/// <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())); }
internal override void AddCustomePara(string paraName, ParaType paraType, object value) { if (IsUseOdpNet) { AddParaForOdpNet(paraName, paraType, value); } else { AddParaForOracleClient(paraName, paraType, value); } }
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; } }
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); }
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); }
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; } }
public Parameter(object para, Type dataType, ParaType pType) { Para = para; ParaType = pType; DataType = dataType; }
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); }
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; }
internal virtual void AddCustomePara(string paraName, ParaType paraType) { }
/// <summary> /// Конструктор параметра /// </summary> /// <param name="type">Тип данных параметра</param> /// <param name="paraType">Способ передачи параметра</param> public Param(Type type, ParaType paraType) { _type = type; ParaType = paraType; }
/// <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); }
/// <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)); }
internal virtual void AddCustomePara(string paraName, ParaType paraType, object value, string typeName) { }
public Parameter(object para,Type dataType, ParaType pType) { Para = para; ParaType = pType; DataType = dataType; }
internal virtual void AddCustomePara(string paraName, ParaType paraType, object value) { }
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; }
/// <summary> /// 设置特殊自定义参数 /// </summary> public MProc SetCustom(object paraName, ParaType paraType) { dalHelper.AddCustomePara(Convert.ToString(paraName), paraType, null); return(this); }