using System; using System.Collections; using System.Collections.Specialized; using System.Data; using System.Configuration; using System.Collections.Generic; using Oracle.ManagedDataAccess.Client; using Oracle.ManagedDataAccess.Types; using System.Text; namespace FangYar.Common { /// /// Copyright (C) Maticsoft /// 数据访问基础类(基于Oracle) /// 可以用户可以修改满足自己项目的需要。 /// public abstract class SqlHelperOra { //public static string connectionString = @"Data Source =(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));User Id=test;Password=test;Integrated Security=no;Unicode=True;"; //public static string connectionString = "User Id=test;Password=test;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))"; //public static string connectionString = System.Configuration.ConfigurationSettings.AppSettings["OraConn"].ToString(); public static string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["OraConn"].ConnectionString; public SqlHelperOra() { } #region 分页查询 /// /// 分页无排序 /// /// 页面索引 /// 页面大小 /// 表名 /// 查询条件 /// public static DataTable QueryPage(int PageIndex, int PageSize, string TableName, string strwhere) { int endnum = PageIndex * PageSize; int startnum = (PageIndex - 1) * PageSize; StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT * FROM ("); strSql.Append("SELECT t.*, ROWNUM RN FROM " + TableName + " t where "); if (strwhere != "") { strSql.Append(strwhere + " and "); } strSql.Append(" ROWNUM <= " + endnum + ") tb"); strSql.Append(" WHERE tb.RN >" + startnum); return QueryTable(strSql.ToString()); } /// /// 分页有排序 /// /// 页面索引 /// 页面大小 /// 表名 /// 查询条件 /// /// 排序 /// public static DataTable QueryPage(int PageIndex, int PageSize, string TableName, string strwhere, string order) { int endnum = PageIndex * PageSize; int startnum = (PageIndex - 1) * PageSize; StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT * FROM (SELECT tt.*, ROWNUM AS RN FROM ( "); strSql.Append("SELECT t.* FROM " + TableName + " t "); if (strwhere != null && strwhere != "") { strSql.Append(" where " + strwhere); } if (order != null && order != "") { strSql.Append(" ORDER BY " + order ); } strSql.Append(") tt WHERE ROWNUM <= " + endnum + ") tb "); strSql.Append(" WHERE tb.RN >" + startnum); return QueryTable(strSql.ToString()); } public static DataTable QueryJoinPage(int PageIndex, int PageSize, string strwhere, string order) { int endnum = PageIndex * PageSize; int startnum = (PageIndex - 1) * PageSize; StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT * FROM (SELECT tt.*, ROWNUM AS RN FROM ( "); strSql.Append(@"SELECT t.ID ,t.TITLE,t.CONTENT ,t.SENDER ,t.SENDERNAME,t.SENDTIME ,t.TASKID ,t.TYPE ,t.ATTACHFILE ,t.READTIME ,t.CATEGORY , t.ISPUBLIC ,t.DIGEST ,t.SOURCE ,t.UPDATETIME ,record.ID as RECORDID,record.RECEIVER ,record.RECEIVERNAME ,record.STATUS FROM TBL_SYS_NOTICE t LEFT JOIN TBL_SYS_NOTICESENDRECORD record ON t.ID = record.NOTICEID "); if (strwhere != null && strwhere != "") { strSql.Append(" where " + strwhere); } if (order != null && order != "") { strSql.Append(" ORDER BY " + order ); } strSql.Append(") tt WHERE ROWNUM <= " + endnum + ") tb "); strSql.Append(" WHERE tb.RN >" + startnum); return QueryTable(strSql.ToString()); } #endregion #region 公用方法 /// /// 获取记录数 /// /// /// public static int GetCount(string sql) { object obj = GetSingle(sql); if (obj == null) { return 0; } else { return int.Parse(obj.ToString()); } } /// /// 获取记录数 /// /// 查询条件 /// 表名 /// 记录数 public static int GetCount(string strwhere, string TableName) { string strsql = string.Format("select count(*) from {0} {1}", TableName, strwhere); object obj = GetSingle(strsql); if (obj == null) { return 1; } else { return int.Parse(obj.ToString()); } } /// /// 获取字段的最大值 /// /// 字段名 /// 表名 /// 字段最大值 public static int GetMaxID(string FieldName, string TableName) { string strsql = string.Format("select max({0})+1 from {1}", FieldName, TableName); object obj = GetSingle(strsql); if (obj == null) { return 1; } else { return int.Parse(obj.ToString()); } } /// /// 获取字段的最大值 /// /// 字段名 /// 表名 /// where条件 /// 字段最大值 public static long GetMaxID(string FieldName, string TableName, string strWhere) { string strsql = string.Format("select max({0})+1 from {1} where 1=1 {2}", FieldName, TableName, strWhere); object obj = GetSingle(strsql); if (obj == null) { return 1; } else { return Convert.ToInt64(obj.ToString()) ; } } /// /// 根据指定Sql语句查询是否存在 /// /// 要执行的Sql语句 /// 存在返回true,不存在返回false public static bool Exists(string strSql) { object obj = GetSingle(strSql); int cmdresult; if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { cmdresult = 0; } else { cmdresult = int.Parse(obj.ToString()); } return cmdresult == 0 ? false : true; } /// /// 根据指定Sql语句及参数查询是否存在 /// /// 要执行的Sql语句(包含参数值的标识) /// 参数值数组 /// 存在返回true,不存在返回false public static bool Exists(string strSql, params OracleParameter[] cmdParms) { object obj = GetSingle(strSql, cmdParms); int cmdresult; if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { cmdresult = 0; } else { cmdresult = int.Parse(obj.ToString()); } if (cmdresult == 0) { return false; } else { return true; } } #endregion #region 执行简单SQL语句 /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static int ExecuteSql(string SQLString) { using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand(SQLString, connection)) { try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (OracleException E) { connection.Close(); throw new Exception(E.Message); } } } } /// /// 执行多条SQL语句,实现数据库事务。 /// /// 多条SQL语句 public static bool ExecuteSqlTran(List SQLStringList) { var _result = false; using (OracleConnection conn = new OracleConnection(connectionString)) { conn.Open(); OracleCommand cmd = new OracleCommand(); cmd.Connection = conn; OracleTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { foreach (var strSql in SQLStringList) { if (strSql.Trim().Length > 1) { cmd.CommandText = strSql; cmd.ExecuteNonQuery(); } } tx.Commit(); _result = true; } catch (OracleException E) { tx.Rollback(); } } return _result; } /// /// 执行多条SQL语句,实现数据库事务。 /// /// 多条SQL语句 public static void ExecuteSqlTran(ArrayList SQLStringList) { using (OracleConnection conn = new OracleConnection(connectionString)) { conn.Open(); OracleCommand cmd = new OracleCommand(); cmd.Connection = conn; OracleTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); } catch (OracleException E) { tx.Rollback(); throw new Exception(E.Message); } } } /// /// 执行带一个存储过程参数的的SQL语句。 /// /// SQL语句 /// 参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加 /// 影响的记录数 public static int ExecuteSql(string SQLString, string content) { using (OracleConnection connection = new OracleConnection(connectionString)) { OracleCommand cmd = new OracleCommand(SQLString, connection); OracleParameter myParameter = new OracleParameter("@content", OracleDbType.NVarchar2); myParameter.Value = content; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (OracleException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例) /// /// SQL语句 /// 图像字节,数据库的字段类型为image的情况 /// 影响的记录数 public static int ExecuteSqlInsertImg(string strSQL, byte[] fs) { using (OracleConnection connection = new OracleConnection(connectionString)) { OracleCommand cmd = new OracleCommand(strSQL, connection); OracleParameter myParameter = new OracleParameter("@fs", OracleDbType.LongRaw); myParameter.Value = fs; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (OracleException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// /// 执行一条计算查询结果语句,返回查询结果(object)。 /// /// 计算查询结果语句 /// 查询结果(object) public static object GetSingle(string SQLString) { using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand(SQLString, connection)) { try { connection.Open(); object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (OracleException e) { connection.Close(); throw new Exception(e.Message); } } } } /// /// 执行查询语句,返回OracleDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) /// /// 查询语句 /// OracleDataReader public static OracleDataReader ExecuteReader(string strSQL) { OracleConnection connection = new OracleConnection(connectionString); OracleCommand cmd = new OracleCommand(strSQL, connection); try { connection.Open(); OracleDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); return myReader; } catch (OracleException e) { throw new Exception(e.Message); } finally { connection = null; connection.Close(); } } /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public static DataSet Query(string SQLString) { using (OracleConnection connection = new OracleConnection(connectionString)) { DataSet ds = new DataSet(); try { connection.Open(); OracleDataAdapter command = new OracleDataAdapter(SQLString, connection); command.Fill(ds, "ds"); } catch (OracleException ex) { throw new Exception(ex.Message); } return ds; } } /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public static DataSet Query(string SQLString, DataSet ds, string TableName) { using (OracleConnection connection = new OracleConnection(connectionString)) { try { connection.Open(); OracleDataAdapter command = new OracleDataAdapter(SQLString, connection); command.Fill(ds, TableName); } catch (OracleException ex) { throw new Exception(ex.Message); } return ds; } } /// /// 执行查询语句,返回DataTable /// /// 查询语句 /// DataTable public static DataTable QueryTable(string SQLString) { using (OracleConnection connection = new OracleConnection(connectionString)) { var dt = new DataTable(); try { connection.Open(); OracleDataAdapter command = new OracleDataAdapter(SQLString, connection); command.Fill(dt); } catch (OracleException ex) { throw new Exception(ex.Message); } return dt; } } #endregion #region 执行带参数的SQL语句 /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static int ExecuteSql(string SQLString, params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand()) { try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; } catch (OracleException E) { throw new Exception(E.Message); } } } } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static DataSet ExecuteProc(string produce, params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand()) { try { PrepareCommand(cmd, connection, null,CommandType.StoredProcedure, produce, cmdParms); using (OracleDataAdapter da = new OracleDataAdapter(cmd)) { DataSet ds = new DataSet(); try { da.Fill(ds); cmd.Parameters.Clear(); } catch (OracleException ex) { throw new Exception(ex.Message); } return ds; } } catch (OracleException E) { throw new Exception(E.Message); } } } } //执行(带参)存储过程返回DataTable public static DataTable ExecuteProcToDataTable(string strProcName, params OracleParameter[] parameters) { DataTable dt = new DataTable(); using (OracleConnection conn = new OracleConnection(connectionString)) { try { OracleCommand cmd = new OracleCommand(); cmd.CommandText = strProcName; cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = conn; conn.Open(); if (parameters != null) { // 添加参数 cmd.Parameters.AddRange(parameters); } // 取数据 using (OracleDataAdapter adapter = new OracleDataAdapter(cmd)) { adapter.Fill(dt); } } catch (Exception ex) { throw new Exception("错误:" + ex.Message + "/r/n跟踪:" + ex.StackTrace); } finally { conn.Close(); } } return dt; } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static OracleCommand ExecuteProcToCommand(string produce, params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(connectionString)) { //connection.Open(); using (OracleCommand cmd = new OracleCommand()) { try { PrepareCommand(cmd, connection, null, CommandType.StoredProcedure, produce, cmdParms); cmd.ExecuteNonQuery(); return cmd; } catch (OracleException E) { throw new Exception(E.Message); } } } } public static void ExecuteProcTest() { using (OracleConnection connection = new OracleConnection(connectionString)) { try { string str_Sql = @"call proc_test(:p1,:p2)"; /*不能用:call proc_test(?,?)或者call proc_test(@p1,@p2),这样会报ORA-01036:非法的变量名/编号错误 */ OracleCommand cmd = new OracleCommand(str_Sql, connection); /*cmd.CommandType = CommandType.StoredProcedure;-注意这种方式调用存储过程,不能指定CommandType为StoredProcedure */ OracleParameter pram1 = new OracleParameter("p1", OracleDbType.Varchar2, 10); pram1.Value = "test"; cmd.Parameters.Add(pram1); OracleParameter pram2 = new OracleParameter("p2", OracleDbType.Varchar2, 10); pram2.Direction = ParameterDirection.Output; cmd.Parameters.Add(pram2); connection.Open(); cmd.ExecuteNonQuery(); string text = cmd.Parameters[1].Value.ToString(); } catch (Exception ex) { throw new Exception(ex.Message); } finally { connection.Close(); } } } public static void ExecuteProcTest2(string produce, params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(connectionString)) { //connection.Open(); using (OracleCommand cmd = new OracleCommand()) { try { cmd.CommandText = produce; cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = connection; connection.Open(); cmd.Parameters.Add(cmdParms[0]); cmd.Parameters.Add(cmdParms[1]); //PrepareCommand(cmd, connection, null, CommandType.StoredProcedure, produce, cmdParms); cmd.ExecuteNonQuery(); string p1 = cmd.Parameters["p1"].Value.ToString();////执行完成后得到回传的结果 string p2 = cmd.Parameters["p2"].Value.ToString();////执行完成后得到回传的结果 } catch (OracleException E) { throw new Exception(E.Message); } } } } /// /// 执行多条SQL语句,实现数据库事务。 /// /// SQL语句的哈希表(key为sql语句,value是该语句的OracleParameter[]) public static void ExecuteSqlTran(Hashtable SQLStringList) { using (OracleConnection conn = new OracleConnection(connectionString)) { conn.Open(); using (OracleTransaction trans = conn.BeginTransaction()) { OracleCommand cmd = new OracleCommand(); try { //循环 foreach (DictionaryEntry myDE in SQLStringList) { string cmdText = myDE.Key.ToString(); OracleParameter[] cmdParms = (OracleParameter[])myDE.Value; PrepareCommand(cmd, conn, trans, cmdText, cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); trans.Commit(); } } catch { trans.Rollback(); throw; } } } } /// /// 执行多条SQL语句,实现数据库事务。 /// /// SQL语句的哈希表(key为sql语句,value是该语句的OracleParameter[]) public static bool ExecuteSqlTranBool(List SQLStringList) { var _result = false; using (OracleConnection conn = new OracleConnection(connectionString)) { conn.Open(); using (OracleTransaction trans = conn.BeginTransaction()) { OracleCommand cmd = new OracleCommand(); try { //循环 foreach (FangYar.Model.OA.CommonSql myDE in SQLStringList) { string cmdText = myDE.sql; OracleParameter[] cmdParms = myDE.param; PrepareCommand(cmd, conn, trans, cmdText, cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); _result = true; } catch(Exception e) { trans.Rollback(); throw; } } } return _result; } /// /// 使用oracle参数化批量插入、更新,实现数据库事务。--做文件上传,批量导入,批量更新 /// /// SQL语句的dictionary集合(key为OracleParameter[]语句,value是该语句的sql语句) public static int ExecuteSqlListParameterTran(Dictionary list) { int val = 0; using (OracleConnection conn = new OracleConnection(connectionString)) { conn.Open(); using (OracleTransaction trans = conn.BeginTransaction()) { OracleCommand cmd = new OracleCommand(); cmd.Connection = conn; try { //循环 foreach (KeyValuePair myDE in list) { if (myDE.Key == null) { cmd.CommandText = myDE.Value.ToString(); if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text; val += cmd.ExecuteNonQuery(); } else { cmd.CommandText = myDE.Value.ToString(); if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text; OracleParameter[] cmdParms = (OracleParameter[])myDE.Key; if (cmdParms != null) { foreach (OracleParameter item in cmdParms) { cmd.Parameters.Add(item); } } val += cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } } trans.Commit(); } catch { trans.Rollback(); throw; } } } return val; } /// /// 执行一条计算查询结果语句,返回查询结果(object)。 /// /// 计算查询结果语句 /// 查询结果(object) public static object GetSingle(string SQLString, params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(connectionString)) { using (OracleCommand cmd = new OracleCommand()) { try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); object obj = cmd.ExecuteScalar(); cmd.Parameters.Clear(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (OracleException e) { throw new Exception(e.Message); } } } } /// /// 执行查询语句,返回OracleDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) /// /// 查询语句 /// OracleDataReader public static OracleDataReader ExecuteReader(string SQLString, params OracleParameter[] cmdParms) { OracleConnection connection = new OracleConnection(connectionString); OracleCommand cmd = new OracleCommand(); try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); OracleDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return myReader; } catch (OracleException e) { throw new Exception(e.Message); } } /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public static DataSet Query(string SQLString, params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(connectionString)) { OracleCommand cmd = new OracleCommand(); PrepareCommand(cmd, connection, null, SQLString, cmdParms); using (OracleDataAdapter da = new OracleDataAdapter(cmd)) { DataSet ds = new DataSet(); try { da.Fill(ds, "ds"); cmd.Parameters.Clear(); } catch (OracleException ex) { throw new Exception(ex.Message); } return ds; } } } /// /// 执行查询语句,返回DataTable /// /// 查询语句 /// DataTable public static DataTable QueryTable(string SQLString, params OracleParameter[] cmdParms) { using (OracleConnection connection = new OracleConnection(connectionString)) { OracleCommand cmd = new OracleCommand(); PrepareCommand(cmd, connection, null, SQLString, cmdParms); using (OracleDataAdapter da = new OracleDataAdapter(cmd)) { var dt = new DataTable(); try { da.Fill(dt); cmd.Parameters.Clear(); } catch (OracleException ex) { throw new Exception(ex.Message); } return dt; } } } /// /// 替换sql语句中的参数占位为真实的参数值 /// /// OracleCommand对象 /// 数据库连接对象 /// 事务对象 /// sql语句 /// 参数值数组 private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, string cmdText, OracleParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text;//cmdType; if (cmdParms != null) { foreach (OracleParameter parm in cmdParms) cmd.Parameters.Add(parm); } } /// /// 替换sql语句中的参数占位为真实的参数值 /// /// OracleCommand对象 /// 数据库连接对象 /// 事务对象 /// sql语句 /// 参数值数组 private static void PrepareCommand(OracleCommand cmd, OracleConnection conn, OracleTransaction trans, CommandType cmdtype, string cmdText, OracleParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdtype;//cmdType; if (cmdParms != null) { foreach (OracleParameter parm in cmdParms) cmd.Parameters.Add(parm); } } #endregion #region 统计某表记录总数 /// /// 统计某表记录总数 /// /// 主键/索引键 /// 数据库.用户名.表名 /// 查询条件 /// 返回记录总数 public static int GetRecordCount(string keyField, string tableName, string condition) { int RecordCount = 0; string sql = "select count(" + keyField + ") as count from " + tableName + " " + condition; DataSet ds = Query(sql); if (ds.Tables[0].Rows.Count > 0) { RecordCount = Convert.ToInt32(ds.Tables[0].Rows[0][0]); } ds.Clear(); ds.Dispose(); return RecordCount; } #endregion #region 统计某表记录总数 /// /// 统计某表记录总数 /// /// /// public static int GetRecordCount(string sql) { int RecordCount = 0; DataSet ds = Query(sql); if (ds.Tables[0].Rows.Count > 0) { RecordCount = Convert.ToInt32(ds.Tables[0].Rows[0][0]); } ds.Clear(); ds.Dispose(); return RecordCount; } /// /// 统计某表记录总数 /// /// 可重复的字段 /// 数据库.用户名.表名 /// 查询条件 /// 字段是否主键 /// 返回记录总数 public static int GetRecordCount(string Field, string tableName, string condition, bool flag) { int RecordCount = 0; if (flag) { RecordCount = GetRecordCount(Field, tableName, condition); } else { string sql = "select count(distinct(" + Field + ")) as count from " + tableName + " " + condition; DataSet ds = Query(sql); if (ds.Tables[0].Rows.Count > 0) { RecordCount = Convert.ToInt32(ds.Tables[0].Rows[0][0]); } ds.Clear(); ds.Dispose(); } return RecordCount; } #endregion #region 统计某表分页总数 /// /// 统计某表分页总数 /// /// 主键/索引键 /// 表名 /// 查询条件 /// 页宽 /// 记录总数 /// 返回分页总数 public int GetPageCount(string keyField, string tableName, string condition, int pageSize, int RecordCount) { int PageCount = 0; PageCount = (RecordCount % pageSize) > 0 ? (RecordCount / pageSize) + 1 : RecordCount / pageSize; if (PageCount < 1) PageCount = 1; return PageCount; } /// /// 统计某表分页总数 /// /// 主键/索引键 /// 表名 /// 查询条件 /// 页宽 /// 返回页面总数 public int GetPageCount(string keyField, string tableName, string condition, int pageSize, ref int RecordCount) { RecordCount = GetRecordCount(keyField, tableName, condition); return GetPageCount(keyField, tableName, condition, pageSize, RecordCount); } /// /// 统计某表分页总数 /// /// 可重复的字段 /// 表名 /// 查询条件 /// 页宽 /// 是否主键 /// 返回页页总数 public int GetPageCount(string Field, string tableName, string condition, ref int RecordCount, int pageSize, bool flag) { RecordCount = GetRecordCount(Field, tableName, condition, flag); return GetPageCount(Field, tableName, condition, pageSize, ref RecordCount); } #endregion #region Sql分页函数 /// /// 构造分页查询SQL语句 /// /// 主键 /// 所有需要查询的字段(field1,field2...) /// 库名.拥有者.表名 /// 查询条件1(where ...) /// 排序条件2(order by ...) /// 当前页号 /// 页宽 /// SQL语句 public static string JoinPageSQL(string KeyField, string FieldStr, string TableName, string Where, string Order, int CurrentPage, int PageSize) { string sql = null; //if (CurrentPage == 1) //{ // sql = "select " + CurrentPage * PageSize + " " + FieldStr + " from " + TableName + " " + Where + " " + Order + " "; //} //else //{ // sql = "select * from ("; // sql += "select " + CurrentPage * PageSize + " " + FieldStr + " from " + TableName + " " + Where + " " + Order + ") a "; // sql += "where " + KeyField + " not in ("; // sql += "select " + (CurrentPage - 1) * PageSize + " " + KeyField + " from " + TableName + " " + Where + " " + Order + ")"; //} sql = "SELECT * FROM (Select ROWNUM AS ROWNO, T.* from " + TableName + " T " + Where + " AND ROWNUM <= " + (PageSize * CurrentPage) + ") TABLE_ALIAS WHERE TABLE_ALIAS.ROWNO >" + ((CurrentPage - 1) * PageSize); return sql; } /// /// 构造分页查询SQL语句 /// /// 字段名(非主键) /// 库名.拥有者.表名 /// 查询条件1(where ...) /// 排序条件2(order by ...) /// 当前页号 /// 页宽 /// SQL语句 public static string JoinPageSQL(string Field, string TableName, string Where, string Order, int CurrentPage, int PageSize) { string sql = null; if (CurrentPage == 1) { sql = "select rownum " + CurrentPage * PageSize + " " + Field + " from " + TableName + " " + Where + " " + Order + " group by " + Field; } else { sql = "select * from ("; sql += "select rownum " + CurrentPage * PageSize + " " + Field + " from " + TableName + " " + Where + " " + Order + " group by " + Field + " ) a "; sql += "where " + Field + " not in ("; sql += "select rownum " + (CurrentPage - 1) * PageSize + " " + Field + " from " + TableName + " " + Where + " " + Order + " group by " + Field + ")"; } return sql; } #endregion } }