Ejemplo n.º 1
0
        DbParameter IDBBase.CreateParameter(LBDbParameter dbParm)
        {
            int iScale = LBDBType.GetSqlDbTypeScale(dbParm.LBDBType);

            if (iScale < 0)
            {
                iScale = 0;
            }

            SQLiteParameter parameter = new SQLiteParameter("@" + dbParm.ParameterName, LBDBType.GetSqlDbType(dbParm.LBDBType));

            parameter.Value = dbParm.Value == null ? DBNull.Value : dbParm.Value;
            return(parameter);


            //        return new SQLiteParameter(
            //"@" + dbParm.ParameterName,
            //            LBDBType.GetSqlDbType( dbParm.LBDBType ),
            //            LBDBType.GetSqlDbTypeSize( dbParm.LBDBType),
            //dbParm.Direction,
            //true,
            //            LBDBType.GetSqlDbTypePrecision( dbParm.LBDBType),
            //(byte)iScale,
            //"",
            //DataRowVersion.Current,
            //dbParm.Value == null ? DBNull.Value : dbParm.Value );
        }
Ejemplo n.º 2
0
        DbParameter IDBBase.CreateParameter(LBDbParameter dbParm)
        {
            int iScale = LBDBType.GetSqlDbTypeScale(dbParm.LBDBType);

            if (iScale < 0)
            {
                iScale = 0;
            }

            return(new SqlParameter(
                       "@" + dbParm.ParameterName,
                       LBDBType.GetSqlDbType(dbParm.LBDBType),
                       LBDBType.GetSqlDbTypeSize(dbParm.LBDBType),
                       dbParm.Direction,
                       true,
                       LBDBType.GetSqlDbTypePrecision(dbParm.LBDBType),
                       (byte)iScale,
                       "",
                       DataRowVersion.Current,
                       dbParm.Value == null ? DBNull.Value : dbParm.Value));
        }
Ejemplo n.º 3
0
        public DataSet RunProcedure(int ProcedureType, string strLoginName, byte[] bSerializeValue, byte[] bSerializeDataType,
                                    out DataTable dtOut, out string ErrorMsg, out bool bolIsError)
        {
            LogHelper.WriteLog("开始RunProcedure:" + ProcedureType.ToString());
            dtOut      = null;
            bolIsError = false;
            DataSet dsReturn = null;

            ErrorMsg = "";
            try
            {
                string strConn = GetConnectionStr();
                SQLServerDAL.GetConnectionString = strConn;

                DataTable dtParmValue = new DataTable("SPIN");
                List <Dictionary <object, object> > lstDictValue = DeserializeObject(bSerializeValue) as List <Dictionary <object, object> >;
                Dictionary <object, object>         dictDataType = DeserializeObject(bSerializeDataType) as Dictionary <object, object>;

                foreach (KeyValuePair <object, object> keyvalue in dictDataType)
                {
                    dtParmValue.Columns.Add(keyvalue.Key.ToString(), GetType(keyvalue.Value.ToString()));
                }

                foreach (Dictionary <object, object> dictValue in lstDictValue)
                {
                    DataRow drNew = dtParmValue.NewRow();
                    foreach (KeyValuePair <object, object> keyvalue in dictValue)
                    {
                        drNew[keyvalue.Key.ToString()] = keyvalue.Value;
                    }
                    dtParmValue.Rows.Add(drNew);
                }
                dtParmValue.AcceptChanges();

                DBHelper.Provider = new DBMSSQL();
                //SqlConnection con = new SqlConnection(SQLServerDAL.GetConnectionString);
                //string strDBName = con.Database;
                //DBMSSQL.InitSettings(5000, con.DataSource, strDBName,);
                //con.Close();

                //LBFactory factory = new LBFactory();
                //IBLLFunction function = factory.GetAssemblyFunction(ProcedureType);
                IBLLFunction function = DBHelper.GetFunctionMethod(ProcedureType);

                #region -- 调用中间层程序方法 --

                string strMethod = function.GetFunctionName(ProcedureType);
                string str       = function.ToString();

                string   strLoad = str.Substring(0, str.IndexOf('.', 8));
                Assembly s       = Assembly.Load(strLoad);
                Type     tpe     = s.GetType(str);


                //调用GetName方法
                MethodInfo method = tpe.GetMethod(strMethod);

                Dictionary <string, string> dictParmType   = new Dictionary <string, string>();
                ParameterInfo[]             parameterInfos = method.GetParameters();
                foreach (ParameterInfo parmInfo in parameterInfos)
                {
                    if (parmInfo.ParameterType.Name != "FactoryArgs")
                    {
                        string strParmTypeName = parmInfo.ParameterType.Name.Replace("&", "");
                        if (!dictParmType.ContainsKey(strParmTypeName))
                        {
                            dictParmType.Add(parmInfo.Name, strParmTypeName);
                        }
                    }
                }

                int iRowIndex = 0;

                if (dtParmValue == null || dtParmValue.Rows.Count == 0)
                {
                    return(null);
                }

                foreach (DataRow drParmValue in dtParmValue.Rows)
                {
                    //获取需要传入的参数
                    ParameterInfo[] parms = method.GetParameters();

                    FactoryArgs factoryArgs = new FactoryArgs(DBHelper.DBName, strLoginName, DBHelper.DBType, null, null);
                    Dictionary <int, string> dictOutFieldName = new Dictionary <int, string>();
                    object[] objValue   = new object[parms.Length];
                    int      iParmIndex = 0;
                    foreach (ParameterInfo ss in parms)
                    {
                        string strParmName = ss.Name;
                        if (ss.ParameterType == typeof(FactoryArgs))
                        {
                            objValue[iParmIndex] = factoryArgs;
                        }
                        else if (ss.Attributes != ParameterAttributes.Out)
                        {
                            if (dtParmValue.Columns.Contains(strParmName))
                            {
                                DataColumn dc    = dtParmValue.Columns[strParmName];
                                object     value = null;
                                if (dc.DataType == typeof(long) ||
                                    dc.DataType == typeof(decimal) ||
                                    dc.DataType == typeof(float) ||
                                    dc.DataType == typeof(double) ||
                                    dc.DataType == typeof(int) ||
                                    dc.DataType == typeof(byte) ||
                                    dc.DataType == typeof(bool))
                                {
                                    if (drParmValue[strParmName] == DBNull.Value)
                                    {
                                        if (dictParmType.ContainsKey(strParmName))
                                        {
                                            ILBDbType lbType = LBDBType.GetILBDbType(dictParmType[strParmName]);
                                            value = lbType;
                                        }
                                        else
                                        {
                                            value = new t_Decimal();
                                        }
                                    }
                                    else
                                    {
                                        if (dictParmType.ContainsKey(strParmName))
                                        {
                                            ILBDbType lbType = LBDBType.GetILBDbType(dictParmType[strParmName]);
                                            lbType.SetValueWithObject(drParmValue[strParmName]);
                                            value = lbType;
                                        }
                                        else
                                        {
                                            value = new t_Decimal(drParmValue[strParmName]);
                                        }
                                    }
                                }
                                else
                                {
                                    if (dictParmType.ContainsKey(strParmName))
                                    {
                                        ILBDbType lbType = LBDBType.GetILBDbType(dictParmType[strParmName]);
                                        lbType.SetValueWithObject(drParmValue[strParmName]);
                                        value = lbType;
                                    }
                                    else
                                    {
                                        value = new t_String(drParmValue[strParmName]);
                                    }
                                }
                                objValue[iParmIndex] = value;
                            }
                        }
                        else
                        {
                            if (dictParmType.ContainsKey(strParmName))
                            {
                                ILBDbType lbType = LBDBType.GetILBDbType(dictParmType[strParmName]);
                                lbType.SetValueWithObject(null);
                                objValue[iParmIndex] = lbType;
                            }

                            if (dtOut == null)
                            {
                                dtOut = new DataTable("Out");
                            }
                            if (!dtOut.Columns.Contains(strParmName))
                            {
                                dtOut.Columns.Add(strParmName, typeof(object));
                            }
                            dictOutFieldName.Add(iParmIndex, strParmName);
                        }

                        iParmIndex++;
                    }

                    if (dtOut != null)
                    {
                        dtOut.Rows.Add(dtOut.NewRow());
                    }

                    //获取Car对象
                    object obj = s.CreateInstance(str);

                    //如果有返回值接收下
                    method.Invoke(obj, objValue);
                    int iobjReturnIndex = 0;
                    foreach (object objReturn in objValue)
                    {
                        if (objReturn is FactoryArgs)
                        {
                            FactoryArgs args = (FactoryArgs)objReturn;
                            if (args.SelectResult != null)
                            {
                                if (dsReturn == null)
                                {
                                    dsReturn = new DataSet("DSResult");
                                }
                                args.SelectResult.TableName = "Return" + iRowIndex.ToString();
                                dsReturn.Tables.Add(args.SelectResult.Copy());
                            }
                        }
                        if (dictOutFieldName.ContainsKey(iobjReturnIndex))
                        {
                            if (objReturn is ILBDbType)
                            {
                                ILBDbType lbtype = objReturn as ILBDbType;
                                if (lbtype.Value != null)
                                {
                                    dtOut.Rows[0][dictOutFieldName[iobjReturnIndex]] = lbtype.Value;
                                }
                            }
                        }
                        iobjReturnIndex++;
                    }
                    iRowIndex++;
                }

                #endregion -- 调用中间层程序方法 --
            }
            catch (Exception ex)
            {
                ErrorMsg   = ex.Message;
                bolIsError = true;
            }
            return(dsReturn);
        }