コード例 #1
0
ファイル: CommonDB.cs プロジェクト: jshailin/sod
 /// <summary>
 /// 根据数据库实例获取数据库类型枚举
 /// </summary>
 /// <param name="db"></param>
 /// <returns></returns>
 public static DBMSType GetDBMSType(CommonDB db)
 {
     if (db != null)
     {
         if (db is Access)
         {
             return(DBMSType.Access);
         }
         if (db is SqlServer)
         {
             return(DBMSType.SqlServer);
         }
         if (db is Oracle)
         {
             return(DBMSType.Oracle);
         }
         if (db is OleDb)
         {
             return(DBMSType.UNKNOWN);
         }
         if (db is Odbc)
         {
             return(DBMSType.UNKNOWN);
         }
     }
     return(DBMSType.UNKNOWN);
 }
コード例 #2
0
 /// <summary>
 /// 主体查询预备执行操作,这里会构造命令日志信息
 /// </summary>
 /// <param name="db">当前查询连接对象</param>
 /// <param name="SQL">当前主体要执行的查询命令</param>
 /// <param name="commandType">命令类型</param>
 /// <param name="parameters">命令参数</param>
 /// <returns>总是返回成功</returns>
 public bool OnExecuting(CommonDB db, ref string SQL, CommandType commandType, IDataParameter[] parameters)
 {
     if (this.enable)
     {
         this.currDb = db;
         db.BeginTransaction();
         //需要真实反映执行的语句顺序,CommandID的赋值推迟到执行后
         //logEntity.CommandID = CommonUtil.NewSequenceGUID();
         //logEntity.ExecuteTime = DateTime.Now;
         //使用 PrepairSQL 方法处理
         //logEntity.CommandText = SQL;
         logEntity.CommandType = commandType;
         logEntity.LogFlag     = 0;
         //logEntity.ParameterInfo = DbParameterSerialize.Serialize(parameters);
         logEntity.PrepairSQL(SQL, DbParameterSerialize.Serialize(parameters));
         if (db.ContextObject != null)
         {
             if (db.ContextObject is OQL)
             {
                 logEntity.CommandName = ((OQL)db.ContextObject).currEntity.GetTableName();
             }
             else if (db.ContextObject is EntityBase)
             {
                 logEntity.CommandName = ((EntityBase)db.ContextObject).GetTableName();
             }
             else
             {
                 logEntity.CommandName = "";
             }
         }
     }
     return(true);
 }
コード例 #3
0
        /// <summary>
        /// 主体查询预备执行操作,这里会构造命令日志信息
        /// </summary>
        /// <param name="db">当前查询连接对象</param>
        /// <param name="SQL">当前主体要执行的查询命令</param>
        /// <param name="commandType">命令类型</param>
        /// <param name="parameters">命令参数</param>
        /// <returns>总是返回成功</returns>
        public bool OnExecuting(CommonDB db, ref string SQL, CommandType commandType, IDataParameter[] parameters)
        {
            if (this.enable)
            {
                this.currDb = db;
                db.BeginTransaction();

                logEntity.CommandID     = CommonUtil.NewSequenceGUID();
                logEntity.CommandText   = SQL;
                logEntity.CommandType   = commandType;
                logEntity.LogFlag       = 0;
                logEntity.ParameterInfo = DbParameterSerialize.Serialize(parameters);
                logEntity.ExecuteTime   = DateTime.Now;
            }
            return(true);
        }
コード例 #4
0
ファイル: CommonDB.cs プロジェクト: onestar1/sod-core
 /// <summary>
 /// 根据数据库实例获取数据库类型枚举
 /// </summary>
 /// <param name="db"></param>
 /// <returns></returns>
 public static DBMSType GetDBMSType(CommonDB db)
 {
     if (db != null)
     {
         //if (db is Access)
         //    return DBMSType.Access;
         if (db is SqlServer)
         {
             return(DBMSType.SqlServer);
         }
         //if (db is Oracle)
         //    return DBMSType.Oracle;
         //if (db is OleDb)
         //    return DBMSType.UNKNOWN;
         //if (db is Odbc)
         //    return DBMSType.UNKNOWN;
     }
     return(DBMSType.UNKNOWN);
 }
コード例 #5
0
 public bool OnExecuting(CommonDB db, ref string SQL, CommandType commandType, IDataParameter[] parameters)
 {
     this.CurrCommandLog.ReSet();
     return(true);
 }
コード例 #6
0
//		/// <summary>
//		/// 获取数据适配器实例
//		/// </summary>
//		/// <returns>数据适配器</returns>
//		protected override IDbDataAdapter  GetDataAdapter(IDbCommand command)
//		{
//			return null;
//		}

//		/// <summary>
//		/// 获取一个新参数对象
//		/// </summary>
//		/// <returns>特定于数据源的参数对象</returns>
//		public override IDataParameter GetParameter()
//		{
//			return null;
//		}

        /// <summary>
        /// 创建公共数据访问类的实例
        /// </summary>
        /// <param name="providerAssembly">提供这程序集名称</param>
        /// <param name="providerType">提供者类型</param>
        /// <returns></returns>
        public static AdoHelper  CreateHelper(string providerAssembly, string providerType)
        {
            return((AdoHelper)CommonDB.CreateInstance(providerAssembly, providerType));
        }
コード例 #7
0
 public DataParameterFormat(CommonDB db)
 {
     this.DB   = db;
     paras     = new List <IDataParameter>();
     paraIndex = 0;
 }
コード例 #8
0
ファイル: MyDB.cs プロジェクト: guipaa/PDF.NET
 /// <summary>
 /// 更新数据集,带数据访问对象
 /// </summary>
 /// <param name="ds">数据集</param>
 /// <param name="DB">数据访问对象</param>
 /// <returns></returns>
 public int UpdateDataSet(DataSet ds, CommonDB DB)
 {
     int count = 0;
     foreach (DataTable dt in ds.Tables)
     {
         if (dt.PrimaryKey.Length > 0)
         {
             count += UpdateDataTable(dt, GetSqlUpdate(dt), DB);
             _msg = "已经更新记录" + count + "条";
         }
         else
         {
             count += UpdateDataTable(dt, GetSqlInsert(dt), DB);
             _msg = "已经插入记录" + count + "条";
         }// end if
     }//end for
     return count;
 }//end function
コード例 #9
0
ファイル: MyDB.cs プロジェクト: guipaa/PDF.NET
        /// <summary>
        /// 更新数据表,带数据访问对象
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="SQL"></param>
        /// <param name="DB"></param>
        /// <returns></returns>
        private int UpdateDataTable(DataTable dt, string SQL, CommonDB DB)
        {
            string ParaChar = GetDBParaChar(DB);
            SQL = SQL.Replace("@@", ParaChar);
            int count = 0;

            foreach (DataRow dr in dt.Rows)
            {
                IDataParameter[] paras = new IDataParameter[dt.Columns.Count];
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    paras[i] = DB.GetParameter(ParaChar + dt.Columns[i].ColumnName, dr[i]);
                }
                count += DB.ExecuteNonQuery(SQL, CommandType.Text, paras);
                if (DB.ErrorMessage != "")
                    throw new Exception(DB.ErrorMessage);
            }

            return count;

        }
コード例 #10
0
ファイル: MyDB.cs プロジェクト: guipaa/PDF.NET
        /// <summary>
        /// 自动保存数据表中的数据到数据库
        /// <remarks>更新时间:2011.11.16</remarks>
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="insertSQL"></param>
        /// <param name="updateSQL"></param>
        /// <param name="DB"></param>
        /// <returns></returns>
        private static int SaveDataTable(DataTable dt, string insertSQL, string updateSQL, CommonDB DB)
        {
            //CommonDB DB = MyDB.GetDBHelper();
            string ParaChar = GetDBParaChar(DB);
            insertSQL = insertSQL.Replace("@@", ParaChar);
            updateSQL = updateSQL.Replace("@@", ParaChar);
            int count = 0;
            DB.BeginTransaction();
            try
            {
                foreach (DataRow dr in dt.Rows)
                {
                    IDataParameter[] paras = new IDataParameter[dt.Columns.Count];
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        paras[i] = DB.GetParameter(ParaChar + dt.Columns[i].ColumnName, dr[i]);
                    }
                    //先更新,如果没有记录受影响再次尝试执行插入
                    int tempCount = DB.ExecuteNonQuery(updateSQL, CommandType.Text, paras);
                    if (tempCount <= 0)
                        tempCount = DB.ExecuteNonQuery(insertSQL, CommandType.Text, paras);

                    count += tempCount;

                    if (DB.ErrorMessage != "")
                        throw new Exception(DB.ErrorMessage);
                }
                DB.Commit();
            }
            catch (Exception ex)
            {
                DB.Rollback();
                throw ex;
            }
            return count;
        }
コード例 #11
0
ファイル: MyDB.cs プロジェクト: guipaa/PDF.NET
 /// <summary>
 /// 获取特定数据库参数字符
 /// </summary>
 /// <param name="DB">数据库类型</param>
 /// <returns></returns>
 private static string GetDBParaChar(CommonDB DB)
 {
     return DB is Oracle ? ":" : "@";
 }
コード例 #12
0
ファイル: MyDB.cs プロジェクト: guipaa/PDF.NET
        /// <summary>
        /// 更新数据集中的字段到数据源中
        /// </summary>
        /// <param name="sDs">源数据集</param>
        /// <param name="tableName">要更新的表</param>
        /// <param name="fieldName">要更新的字段</param>
        /// <param name="fieldValue">字段的值</param>
        /// <param name="pkName">主键名称</param>
        /// <param name="DB">数据访问对象</param>
        /// <returns></returns>
        public int UpdateField(DataSet sDs, string tableName, string fieldName, object fieldValue, string pkName, CommonDB DB)
        {
            DataSet ds = sDs.Copy();
            DataTable dt = ds.Tables[tableName];
            fieldName = fieldName.ToUpper();
            pkName = pkName.ToUpper();

            for (int i = 0; i < dt.Columns.Count; i++)
            {
                string colName = dt.Columns[i].ColumnName.ToUpper();
                if (colName == fieldName || colName == pkName)
                    continue;
                dt.Columns.Remove(colName);
                i = 0;//集合元素位置可能已经迁移,所以需要重新从头开始查找
            }
            dt.PrimaryKey = new DataColumn[] { dt.Columns[pkName] };
            foreach (DataRow dr in dt.Rows)
            {
                dr[fieldName] = fieldValue;
            }

            int updCount = UpdateDataSet(ds, DB);
            return updCount;
        }
コード例 #13
0
ファイル: MyDB.cs プロジェクト: guipaa/PDF.NET
 /// <summary>
 /// 根据主键信息从数据源查询数据表到数据集中
 /// </summary>
 /// <param name="fields">字段列表</param>
 /// <param name="tableName">数据源中的表名称</param>
 /// <param name="pkNames">主键名称数组</param>
 /// <param name="pkValues">主键值数组,必须和主键名对应</param>
 /// <param name="DB">数据访问对象</param>
 /// <returns></returns>
 public DataSet SelectDataSet(string fields, string tableName, string[] pkNames, object[] pkValues, CommonDB DB)
 {
     string ParaChar = GetDBParaChar(DB);
     string sqlSelect = "SELECT " + fields + " FROM " + tableName + " WHERE 1=1 ";
     IDataParameter[] paras = new IDataParameter[pkNames.Length];
     for (int i = 0; i < pkNames.Length; i++)
     {
         sqlSelect += " And " + pkNames[i] + "=" + ParaChar + pkNames[i];
         paras[i] = DB.GetParameter(ParaChar + pkNames[i], pkValues[i]);
     }
     DataSet ds = DB.ExecuteDataSet(sqlSelect, CommandType.Text, paras);
     ds.Tables[0].TableName = tableName;
     return ds;
 }
コード例 #14
0
ファイル: MyDB.cs プロジェクト: guipaa/PDF.NET
        }//end function

        /// <summary>
        /// 根据数据集中在指定的表中,根据表中的指定列的值在数据源中删除数据,带数据访问对象
        /// </summary>
        /// <param name="ds">数据集</param>
        /// <param name="tableName">表名称</param>
        /// <param name="columnName">列名</param>
        /// <param name="DB">数据访问对象</param>
        /// <returns></returns>
        public int DeleteDataSet(DataSet ds, string tableName, string columnName, CommonDB DB)
        {
            DataTable dt = ds.Tables[tableName];
            string ParaChar = GetDBParaChar(DB);
            int count = 0;
            string sqlDelete = "DELETE FROM " + tableName + " WHERE " + columnName + "=" + ParaChar + columnName;
            foreach (DataRow dr in dt.Rows)
            {
                IDataParameter[] paras = { DB.GetParameter(ParaChar + columnName, dr[columnName]) };
                count += DB.ExecuteNonQuery(sqlDelete, CommandType.Text, paras);
                if (DB.ErrorMessage != "")
                    throw new Exception(DB.ErrorMessage);
                if (count >= dt.Rows.Count) break;
            }
            return count;
        }
コード例 #15
0
ファイル: EntityCommand.cs プロジェクト: guipaa/PDF.NET
 public EntityCommand(EntityBase entity, CommonDB db)
 {
     this.currEntity = entity;
     this.currDb = db;
 }
コード例 #16
0
ファイル: CommonDB.cs プロジェクト: guipaa/PDF.NET
 /// <summary>
 /// 根据数据库实例获取数据库类型枚举
 /// </summary>
 /// <param name="db"></param>
 /// <returns></returns>
 public static DBMSType GetDBMSType(CommonDB db)
 {
     if (db != null)
     {
         if (db is Access)
             return DBMSType.Access;
         if (db is SqlServer)
             return DBMSType.SqlServer;
         if (db is Oracle)
             return DBMSType.Oracle;
         if (db is OleDb)
             return DBMSType.UNKNOWN;
         if (db is Odbc)
             return DBMSType.UNKNOWN;
     }
     return DBMSType.UNKNOWN;
 }
コード例 #17
0
ファイル: MyDB.cs プロジェクト: guipaa/PDF.NET
        }//end function

        /// <summary>
        /// 自动将数据集中的数据更新或者插入到数据库
        /// <remarks>更新时间:2011.11.16</remarks>
        /// </summary>
        /// <param name="ds"></param>
        /// <param name="DB"></param>
        /// <returns></returns>
        public static int SaveDataSet(DataSet ds, CommonDB DB)
        {
            int count = 0;
            foreach (DataTable dt in ds.Tables)
            {
                string insertSql = GetSqlInsert(dt);
                string updateSql = GetSqlUpdate(dt);
                count += SaveDataTable(dt, insertSql, updateSql, DB);
            }//end for
            return count;
        }