在上一篇中介绍了如何使用odp.net代替ado.net,不过demo程序是C/S的,今天写一个B/S的,主要是获取翻页存储过程的数据和行数。
首先,在Web.Config中配置数据库连接字串,具体企业库怎么配置连接字串这里就不介绍了。代码如下:
<add name="OracleSource" connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.88)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)));User Id=sys;Password=123;" providerName="Oracle.DataAccess.Client" />
然后,在.cs文件中编写如下代码,代码要注意的地方是存储过程的参数名要与代码中的参数名一致:
/// <summary>
/// 获取当前页数据
/// </summary>
/// <returns></returns>
public DataSet GetCurrentDataSet()
{
//调用EnterpriseLibrary获取Database对象
Database db = DatabaseFactory.CreateDatabase("OracleSource");
//获取OracleCommand
OracleCommand com = db.GetStoredProcCommand("WP_ALL_PAGINATION") as OracleCommand;
//表名称
com.Parameters.Add("TABLENAME_IN", OracleDbType.Varchar2, 50);
com.Parameters["TABLENAME_IN"].Direction = ParameterDirection.Input;
com.Parameters["TABLENAME_IN"].Value = tableName;
//每页显示记录数
com.Parameters.Add("PAGESIZE_IN", OracleDbType.Int32);
com.Parameters["PAGESIZE_IN"].Direction = ParameterDirection.Input;
com.Parameters["PAGESIZE_IN"].Value = PageSize * PageNo;
//当前页索引值
com.Parameters.Add("PAGEINDEX_IN", OracleDbType.Int32);
com.Parameters["PAGEINDEX_IN"].Direction = ParameterDirection.Input;
com.Parameters["PAGEINDEX_IN"].Value = (PageNo - 1) * PageSize;
//排序字段
com.Parameters.Add("ORDERSYNTAX_IN", OracleDbType.Varchar2, 3000);
com.Parameters["ORDERSYNTAX_IN"].Direction = ParameterDirection.Input;
com.Parameters["ORDERSYNTAX_IN"].Value = orderBY;
//Where子句下条件
com.Parameters.Add("CONDITION_IN", OracleDbType.Varchar2, 3000);
com.Parameters["CONDITION_IN"].Direction = ParameterDirection.Input;
com.Parameters["CONDITION_IN"].Value = whereCondition;
//显示的字段
com.Parameters.Add("FIELDSNAME_IN", OracleDbType.Varchar2,300);
com.Parameters["FIELDSNAME_IN"].Direction = ParameterDirection.Input;
com.Parameters["FIELDSNAME_IN"].Value = showFields;
//主键
com.Parameters.Add("ONLYFIELD_IN", OracleDbType.Varchar2, 100);
com.Parameters["ONLYFIELD_IN"].Direction = ParameterDirection.Input;
com.Parameters["ONLYFIELD_IN"].Value = guid;
//返回总记录数
com.Parameters.Add("COUNT_OUT", OracleDbType.Int32);
com.Parameters["COUNT_OUT"].Direction = ParameterDirection.InputOutput;
com.Parameters["COUNT_OUT"].Value = 0;
//返回记录集
com.Parameters.Add("cur_out", OracleDbType.RefCursor);
com.Parameters["cur_out"].Direction = ParameterDirection.Output;
DataSet ds = db.ExecuteDataSet(com);
//符合条件的记录总条数
Count = int.Parse(com.Parameters["COUNT_OUT"].Value.ToString());
return ds;
}