|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
|
由于客户对速度和性能上的要求越来越变态,而数据量一天天的庞大,因此本人产生了数据的查询和分页完全由客户端回调来实现。想法看上去复杂,实现起来也不难。废话不多说,看程序吧。 5jELinux联盟 5jELinux联盟 一、存储过程 5jELinux联盟 5jELinux联盟 包头: 5jELinux联盟 5jELinux联盟 create or replace package H_QUERYPACK is 5jELinux联盟 5jELinux联盟 -- Author : Evorul 5jELinux联盟 -- Created : 2007-3-29 5jELinux联盟 -- Purpose : 查询机构表 5jELinux联盟 5jELinux联盟 -- Public type declarations 5jELinux联盟 type MYCURSOR is REF CURSOR; 5jELinux联盟 PROCEDURE QUERYLOG (RET_CURSOR OUT MYCURSOR,ERRORCODE OUT INT,p_logID int,p_StartTime Date,p_EndTime Date,p_Operator varchar2 ,p_OrderField varchar2 , 5jELinux联盟 p_Desc int,p_PageSize Int,p_PageIndex Int,p_RecordCount Out Int); 5jELinux联盟 5jELinux联盟 end H_QUERYPACK; 5jELinux联盟 5jELinux联盟 5jELinux联盟 包体: 5jELinux联盟 5jELinux联盟 create or replace package body H_QUERYPACK Is 5jELinux联盟 -- Author : Evorul 5jELinux联盟 -- Created : 2007-3-29 5jELinux联盟 -- Purpose : 查询 5jELinux联盟 5jELinux联盟 -- 查询公司,分页用 5jELinux联盟 PROCEDURE QUERYLOG (RET_CURSOR OUT MYCURSOR,ERRORCODE OUT INT,p_logID int,p_StartTime Date,p_EndTime Date,p_Operator varchar2 ,p_OrderField varchar2 , 5jELinux联盟 p_Desc int,p_PageSize Int,p_PageIndex Int,p_RecordCount Out Int) 5jELinux联盟 AS 5jELinux联盟 v_sql varchar2(3000); 5jELinux联盟 v_sqlcount varchar2(3000); 5jELinux联盟 v_orderfield varchar2(100); 5jELinux联盟 v_order VARCHAR2(5); --顺序 5jELinux联盟 v_count int; 5jELinux联盟 v_heiRownum int; 5jELinux联盟 v_lowRownum int; 5jELinux联盟 BEGIN 5jELinux联盟 ERRORCODE:=0; 5jELinux联盟 5jELinux联盟 v_sql:='select * from LOG Where 1=1 '; 5jELinux联盟 5jELinux联盟 if(p_logID <> 0)then 5jELinux联盟 v_sql := v_sql || ' and id = ' || TO_CHAR(p_logID); 5jELinux联盟 end if; 5jELinux联盟 5jELinux联盟 IF p_Operator Is Not Null Then then 5jELinux联盟 v_sql := v_sql || 'And operator LIKE ''%' || RTRIM(LTRIM(p_Operator))||'%'''; 5jELinux联盟 end if; 5jELinux联盟 5jELinux联盟 v_sql := v_sql ||' and (TO_CHAR(time,''YYYYMMDD'') between ''' || to_char(p_StartTime, 'YYYYMMDD') ||''' and ''' || to_char(p_EndTime, 'YYYYMMDD') ||''')'; 5jELinux联盟 5jELinux联盟 5jELinux联盟 5jELinux联盟 ----取记录总数 5jELinux联盟 v_sqlcount := 'select count(*) from (' || v_sql || ')'; 5jELinux联盟 execute immediate v_sqlcount into v_count; 5jELinux联盟 p_RecordCount := v_count; 5jELinux联盟 5jELinux联盟 --排序字段 5jELinux联盟 IF p_OrderField IS NOT NULL THEN 5jELinux联盟 v_orderfield:=p_OrderField; 5jELinux联盟 Else 5jELinux联盟 v_orderfield:='ID'; 5jELinux联盟 END IF; 5jELinux联盟 --是否降序 5jELinux联盟 IF p_Desc <>0 THEN 5jELinux联盟 v_order:=' ASC'; 5jELinux联盟 Else 5jELinux联盟 v_order:=' DESC'; 5jELinux联盟 END IF; 5jELinux联盟 5jELinux联盟 v_sql:=v_sql || 'ORDER BY '|| v_orderfield || v_order; 5jELinux联盟 ----执行分页查询 5jELinux联盟 v_heiRownum := p_PageIndex * p_PageSize; 5jELinux联盟 v_lowRownum := v_heiRownum - p_PageSize + 1; 5jELinux联盟 5jELinux联盟 v_sql := 'SELECT * FROM ( 5jELinux联盟 SELECT A.*, rownum rn FROM ('|| v_sql ||') A WHERE rownum <= '|| to_char(v_heiRownum) || ') B WHERE rn >= ' || to_char(v_lowRownum) ; 5jELinux联盟 5jELinux联盟 5jELinux联盟 OPEN RET_CURSOR FOR v_sql; 5jELinux联盟 5jELinux联盟 EXCEPTION 5jELinux联盟 WHEN NO_DATA_FOUND THEN 5jELinux联盟 ERRORCODE:=9999; 5jELinux联盟 WHEN OTHERS THEN 5jELinux联盟 ERRORCODE:=9999; 5jELinux联盟 END QUERYLOG; 5jELinux联盟 5jELinux联盟 END H_QUERYPACK; 5jELinux联盟 二、程序 5jELinux联盟 5jELinux联盟 DataAccess.cs 5jELinux联盟 5jELinux联盟 5jELinux联盟 5jELinux联盟 using System; 5jELinux联盟 using System.Data; 5jELinux联盟 using System.Data.OracleClient; 5jELinux联盟 using System.Collections; 5jELinux联盟 using System.Collections.Specialized; 5jELinux联盟 5jELinux联盟 /**//// <summary> 5jELinux联盟 ///数据层 author: EvoRul date:2007-03-29 5jELinux联盟 /// </summary> 5jELinux联盟 public class DataAccess 5jELinux联盟 ...{ 5jELinux联盟 5jELinux联盟 /**//// <summary> 5jELinux联盟 /// 返回数据库连接字符串 5jELinux联盟 /// </summary> 5jELinux联盟 public static String DatabaseConnectionString 5jELinux联盟 ...{ 5jELinux联盟 get 5jELinux联盟 ...{ 5jELinux联盟 NameValueCollection configSettings = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings"); 5jELinux联盟 return configSettings["connectionString"]; 5jELinux联盟 } 5jELinux联盟 } 5jELinux联盟 5jELinux联盟 /**//// <summary> 5jELinux联盟 /// 返回每一页显示的纪录数 5jELinux联盟 /// </summary> 5jELinux联盟 public static int RowsPerPage 5jELinux联盟 ...{ 5jELinux联盟 get 5jELinux联盟 ...{ 5jELinux联盟 NameValueCollection configSettings = (NameValueCollection)System.Configuration.ConfigurationManager.GetSection("appSettings"); 5jELinux联盟 return Convert.ToInt32(configSettings["rowsPerPage"]); 5jELinux联盟 } 5jELinux联盟 } 5jELinux联盟 5jELinux联盟 /**//// <summary> 5jELinux联盟 /// 获取特定日志集合 5jELinux联盟 /// </summary> 5jELinux联盟 /// <param name="typeID">日志类型</param> 5jELinux联盟 /// <param name="userID">操作人</param> 5jELinux联盟 /// <param name="strOrderField">排序字段</param> 5jELinux联盟 /// <param name="intASC">是否升序 0-降序,1-升</param> 5jELinux联盟 /// <param name="PageIndex">页码</param> 5jELinux联盟 /// <param name="rowCount">页行数</param> 5jELinux联盟 /// <param name="recordSum">符合条件的总记录数</param> 5jELinux联盟 /// <returns></returns> 5jELinux联盟 public static ArrayList QueryLog(string strOperator,DateTime dtStartTime,DateTime dtEndTime, string strOrderField, 5jELinux联盟 int intASC, int PageIndex, int rowCount, out int recordSum) 5jELinux联盟 ...{ 5jELinux联盟 // 返回集合 5jELinux联盟 ArrayList myArrayList = new ArrayList(); 5jELinux联盟 5jELinux联盟 // 创建连接 5jELinux联盟 OracleConnection myConnection = new OracleConnection(DatabaseConnectionString); 5jELinux联盟 5jELinux联盟 try 5jELinux联盟 ...{ 5jELinux联盟 // 打开连接 5jELinux联盟 myConnection.Open(); 5jELinux联盟 } 5jELinux联盟 catch (Exception ex) 5jELinux联盟 ...{ 5jELinux联盟 throw (ex); 5jELinux联盟 } 5jELinux联盟 5jELinux联盟 try 5jELinux联盟 ...{ 5jELinux联盟 // 创建存储过程 5jELinux联盟 OracleCommand myCommand = new OracleCommand("H_QUERYPACK.QUERYLOG", myConnection); 5jELinux联盟 myCommand.CommandType = CommandType.StoredProcedure; 5jELinux联盟 OracleDataReader dr; 5jELinux联盟 5jELinux联盟 // ============================== 参数定义 ============================== 5jELinux联盟 5jELinux联盟 // 返回值 5jELinux联盟 myCommand.Parameters.Add("RET_CURSOR", OracleType.Cursor); 5jELinux联盟 myCommand.Parameters["RET_CURSOR"].Direction = ParameterDirection.Output; 5jELinux联盟 OracleParameter ret = myCommand.Parameters.Add("ERRORCODE", OracleType.Int32); 5jELinux联盟 ret.Direction = ParameterDirection.Output; 5jELinux联盟 5jELinux联盟 OracleParameter retCountSum = myCommand.Parameters.AddWithValue("p_RecordCount", OracleType.Int32); 5jELinux联盟 retCountSum.Direction = ParameterDirection.Output; 5jELinux联盟 5jELinux联盟 // 编号 5jELinux联盟 myCommand.Parameters.AddWithValue("p_logID", OracleType.Int32).Value = 0; 5jELinux联盟 5jELinux联盟 // 用户编号 5jELinux联盟 myCommand.Parameters.AddWithValue("p_Operator", OracleType.VarChar).Value = strOperator; 5jELinux联盟 5jELinux联盟 // 时间下限 5jELinux联盟 myCommand.Parameters.AddWithValue("p_StartTime", OracleType.DateTime).Value = dtStartTime; 5jELinux联盟 5jELinux联盟 // 时间上限 5jELinux联盟 myCommand.Parameters.AddWithValue("p_EndTime", OracleType.DateTime).Value =dtEndTime; 5jELinux联盟 5jELinux联盟 // 排序字段 5jELinux联盟 myCommand.Parameters.AddWithValue("p_OrderField", OracleType.VarChar).Value = strOrderField; 5jELinux联盟 5jELinux联盟 // 怎么排序 5jELinux联盟 myCommand.Parameters.AddWithValue("p_Desc", OracleType.Int32).Value = intASC; 5jELinux联盟 5jELinux联盟 // 每页行数 5jELinux联盟 myCommand.Parameters.AddWithValue("p_PageSize", OracleType.Int32).Value = rowCount; 5jELinux联盟 5jELinux联盟 //页码 5jELinux联盟 myCommand.Parameters.AddWithValue("p_PageIndex", OracleType.Int32).Value = PageIndex; 5jELinux联盟 5jELinux联盟 5jELinux联盟 5jELinux联盟 // ============================ 参数定义完毕 ============================ 5jELinux联盟 5jELinux联盟 // 执行存储过程 5jELinux联盟 dr = myCommand.ExecuteReader(); 5jELinux联盟 5jELinux联盟 // 执行未成功 5jELinux联盟 if (Convert.ToInt32(ret.Value) != 0) 5jELinux联盟 throw new Exception("执行存储过程出错!"); 5jELinux联盟 5jELinux联盟 // 总记录数 5jELinux联盟 recordSum = Convert.ToInt32(retCountSum.Value); 5jELinux联盟 5jELinux联盟 5jELinux联盟 while (dr.Read()) 5jELinux联盟 ...{ 5jELinux联盟 // 创建新日志 5jELinux联盟 Log log = new Log(); 5jELinux联盟 5jELinux联盟 //操作业务类型 5jELinux联盟 if (dr["operationtype"] != DBNull.Value) 5jELinux联盟 ...{ 5jELinux联盟 log.OperationType = Convert.ToString(dr["operationtype"]); 5jELinux联盟 } 5jELinux联盟 // 时间 5jELinux联盟 if (dr["time"] != DBNull.Value) 5jELinux联盟 log.Time = Convert.ToDateTime(dr["time"]); 5jELinux联盟 5jELinux联盟 // 用户 5jELinux联盟 if (dr["operator"] != DBNull.Value) 5jELinux联盟 ...{ 5jELinux联盟 log.Operator = Convert.ToString(dr["operator"]); 5jELinux联盟 } 5jELinux联盟 5jELinux联盟 // 信息 5jELinux联盟 if (dr["info"] != DBNull.Value) 5jELinux联盟 log.Info = Convert.ToString(dr["info"]); 5jELinux联盟 5jELinux联盟 // 加入返回集合 5jELinux联盟 myArrayList.Add(log); 5jELinux联盟 } 5jELinux联盟 5jELinux联盟 dr.Close(); 5jELinux联盟 return myArrayList; 5jELinux联盟 } 5jELinux联盟 catch (Exception ex) 5jELinux联盟 ...{ 5jELinux联盟 throw (ex); 5jELinux联盟 } 5jELinux联盟 finally 5jELinux联盟 ...{ 5jELinux联盟 myConnection.Close(); 5jELinux联盟 } 5jELinux联盟 } 5jELinux联盟 } 5jELinux联盟
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|
|
|
|
|