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 ); }
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)); }
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); }