Asp.Net Oracle数据的通用操作类

  在一个项目中,可能用到2种数据,比如说ORACLE ,MS_SQLSERVER 同时要用到,MS-SQL的数据通用类在很多的教程中都有现成的例子和代码,但是ORACLE比较少见,但是本次项目中正好用到,贴出来和大家一起共享。

  这里用OraDbHelper.cs做常见的四种数据操作

  一 ExecuteDataTable 返回到内存数据表

  二 SqlDataReader 直接读数据

  三 ExecuteScalar 获得一条数据

  四 ExecuteNonQuery 对数据库执行增删改操作

  环境:客户端WIN XP 安装的是ORACLE 8.17客户端

  数据库服务器是:Red Hat Enterprise Linux AS 安装的是Oracle Database 10g

  

复制代码 代码如下:

  SQL*Plus: Release 8.1.7.0.0 - Production on 星期六 12月 19 18:10:19 2009

  (c) Copyright 2000 Oracle Corporation. All rights reserved.

  连接到:

  Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

  With the Partitioning, OLAP and Data Mining options

  首先 OraDbHelper.cs

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  using System.Data.SqlClient;

  using System.Data.OracleClient;

  namespace xjy.DAL

  {

  /// <summary>

  /// OraDbHelper 对ORACLE 数据库操作的通用类

  /// 作者;薛佳岳

  /// 日期:2009-12-18

  /// </summary>

  public class OraDbHelper

  {

  private string connectionString;

  /// <summary>

  /// 设置数据库字符串的连接

  /// </summary>

  public string ConnectionString

  {

  set { connectionString = value; }

  }

  public OraDbHelper(string connectionString)

  {

  this.connectionString = connectionString;

  }

  #region ExecuteDataTable

  /// <summary>

  /// 执行一个查询,并返回结果集

  /// </summary>

  /// <param name="commandText">要执行的查询SQL文本命令</param>

  /// <returns>返回查询结果集</returns>

  public DataTable ExecuteDataTable(string commandText)

  {

  return ExecuteDataTable(commandText, CommandType.Text, null);

  }

  /// <summary>

  /// 执行一个查询,并返回查询结果

  /// </summary>

  /// <param name="commandText">要执行的SQL语句</param>

  /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>

  /// <returns>返回查询结果集</returns>

  public DataTable ExecuteDataTable(string commandText, CommandType commandType)

  {

  return ExecuteDataTable(commandText, commandType, null);

  }

  /// <summary>

  /// 执行一个查询,并返回查询结果

  /// </summary>

  /// <param name="commandText">要执行的SQL语句</param>

  /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>

  /// <param name="parameters">PL-SQL 语句或存储过程的参数数组</param>

  /// <returns></returns>

  public DataTable ExecuteDataTable(string commandText, CommandType commandType, params OracleParameter[] parameters)

  {

  DataTable data = new DataTable();//实例化DataTable,用于装载查询结果集

  using (OracleConnection connection = new OracleConnection(connectionString))

  {

  using (OracleCommand command = new OracleCommand(commandText, connection))

  {

  command.CommandType = commandType;//设置command的CommandType为指定的CommandType

  //如果同时传入了参数,则添加这些参数

  if (parameters != null)

  {

  foreach (OracleParameter parameter in parameters)

  {

  command.Parameters.Add(parameter);

  }

  }

  //通过包含查询SQL的SqlCommand实例来实例化SqlDataAdapter

  OracleDataAdapter adapter = new OracleDataAdapter(command);

  adapter.Fill(data);//填充DataTable

  }

  }

  return data;

  }

  #endregion ExecuteDataTable

  #region ExecuteReader

  /// <summary>

  /// 将 CommandText 发送到 Connection 并生成一个 OracleDataReader。

  /// </summary>

  /// <param name="commandText">要执行的查询SQL文本命令</param>

  /// <returns></returns>

  public OracleDataReader ExecuteReader(string commandText)

  {

  return ExecuteReader(commandText, CommandType.Text, null);

  }

  /// <summary>

  /// 将 CommandText 发送到 Connection 并生成一个 OracleDataReader。

  /// </summary>

  /// <param name="commandText">要执行的SQL语句</param>

  /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>

  /// <returns></returns>

  public OracleDataReader ExecuteReader(string commandText, CommandType commandType)

  {

  return ExecuteReader(commandText, commandType, null);

  }

  /// <summary>

  /// 将 CommandText 发送到 Connection 并生成一个 OracleDataReader。

  /// </summary>

  /// <param name="commandText">要执行的SQL语句</param>

  /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>

  /// <param name="parameters">Transact-SQL 语句或存储过程的参数数组</param>

  /// <returns></returns>

  public OracleDataReader ExecuteReader(string commandText, CommandType commandType, OracleCommand[] parameters)

  {

  OracleConnection connection = new OracleConnection(connectionString);

  OracleCommand command = new OracleCommand(commandText, connection);

  //如果同时传入了参数,则添加这些参数

  if (parameters != null)

  {

  foreach (OracleCommand parameter in parameters)

  {

  command.Parameters.Add(parameter);

  }

  }

  connection.Open();

  //CommandBehavior.CloseConnection参数指示关闭Reader对象时关闭与其关联的Connection对象

  return command.ExecuteReader(CommandBehavior.CloseConnection);

  }

  #endregion ExecuteReader

  #region ExecuteScalar

  /// <summary>

  /// 从数据库中检索单个值(例如一个聚合值)。

  /// </summary>

  /// <param name="commandText">要执行的查询PL-SQL文本命令</param>

  /// <returns></returns>

  public Object ExecuteScalar(string commandText)

  {

  return ExecuteScalar(commandText, CommandType.Text, null);

  }

  /// <summary>

  /// 从数据库中检索单个值(例如一个聚合值)。

  /// </summary>

  /// <param name="commandText">要执行的SQL语句</param>

  /// <param name="commandType">要执行的查询语句的类型,如存储过程或者PL-SQL文本命令</param>

  /// <returns></returns>

  public Object ExecuteScalar(string commandText, CommandType commandType)

  {

  return ExecuteScalar(commandText, commandType, null);

  }

  /// <summary>

  /// 从数据库中检索单个值(例如一个聚合值)。

  /// </summary>

  /// <param name="commandText">要执行的SQL语句</param>

  /// <param name="commandType">要执行的查询语句的类型,如存储过程或者SQL文本命令</param>

  /// <param name="parameters">PL-SQL 语句或存储过程的参数数组</param>

  /// <returns></returns>

  public Object ExecuteScalar(string commandText, CommandType commandType, OracleParameter[] parameters)

  {

  object result = null;

  using (OracleConnection connection = new OracleConnection(connectionString))

  {

  using (OracleCommand command = new OracleCommand(commandText, connection))

  {

  command.CommandType = commandType;//设置command的CommandType为指定的CommandType

  //如果同时传入了参数,则添加这些参数

  if (parameters != null)

  {

  foreach (OracleParameter parameter in parameters)

  {

  command.Parameters.Add(parameter);

  }

  }

  connection.Open();//打开数据库连接

  result = command.ExecuteScalar();

  }

  }

  return result;//返回查询结果的第一行第一列,忽略其它行和列

  }

  #endregion ExecuteScalar

  #region ExecuteNonQuery

  /// <summary>

  /// 对数据库执行增删改操作

  /// </summary>

  /// <param name="commandText">要执行的查询pl-sql文本命令</param>

  /// <returns></returns>

  public int ExecuteNonQuery(string commandText)

  {

  return ExecuteNonQuery(commandText, CommandType.Text, null);

  }

  /// <summary>

  /// 对数据库执行增删改操作

  /// </summary>

  /// <param name="commandText">要执行的pl-sql语句</param>

  /// <param name="commandType">要执行的查询语句的类型,如存储过程或者pl-sql文本命令</param>

  /// <returns></returns>

  public int ExecuteNonQuery(string commandText, CommandType commandType)

  {

  return ExecuteNonQuery(commandText, commandType, null);

  }

  /// <summary>

  /// 对数据库执行增删改操作

  /// </summary>

  /// <param name="commandText">要执行的pl-sql语句</param>

  /// <param name="commandType">要执行的查询语句的类型,如存储过程或者pl-sql文本命令</param>

  /// <param name="parameters">pl-sql 语句或存储过程的参数数组</param>

  /// <returns>返回执行操作受影响的行数</returns>

  public int ExecuteNonQuery(string commandText, CommandType commandType, OracleParameter[] parameters)

  {

  int count = 0;

  using (OracleConnection connection = new OracleConnection(connectionString))

  {

  using (OracleCommand command = new OracleCommand(commandText, connection))

  {

  command.CommandType = commandType;//设置command的CommandType为指定的CommandType

  //如果同时传入了参数,则添加这些参数

  if (parameters != null)

  {

  foreach (OracleParameter parameter in parameters)

  {

  command.Parameters.Add(parameter);

  }

  }

  connection.Open();//打开数据库连接

  count = command.ExecuteNonQuery();

  }

  }

  return count;//返回执行增删改操作之后,数据库中受影响的行数

  }

  #endregion ExecuteNonQuery

  }

  }

  一测试datatable

  前台代码

  

复制代码 代码如下:

  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml">

  <head runat="server">

  <title>无标题页</title>

  </head>

  <body>

  <form id="form1" runat="server">

  <div>

  <asp:GridView ID="GridView1" runat="server">

  </asp:GridView>

  </div>

  </form>

  </body>

  </html>

  后台代码

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Collections;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  using xjy.DAL;

  using System.Data.SqlClient;

  public partial class _Default : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString1"];

  string myStr = setting.ConnectionString;

  OraDbHelper myora = new OraDbHelper(myStr);

  DataTable t1 = new DataTable();

  t1=myora.ExecuteDataTable("select art_no,descr from article where art_no<100");

  GridView1.DataSource=t1;

  GridView1.DataBind();

  }

  }

  结果如图

  

Asp.Net Oracle数据的通用操作类

  二 测试 SqlDataReader

  前台代码不变

  后台代码如下:

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Collections;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  using xjy.DAL;

  using System.Data.SqlClient;

  using System.Data.OracleClient;

  public partial class _Default : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString1"];

  string myStr = setting.ConnectionString;

  OraDbHelper myora = new OraDbHelper(myStr);

  OracleDataReader myDr = myora.ExecuteReader("select art_no,descr from article where art_no<100");

  while (myDr.Read())

  {

  Response.Write("|" + myDr[0] + "|" + myDr[1]+"

  ");

  Response.Write("____________________________________");

  }

  myDr.Close();

  myDr.Dispose();

  }

  }

  结果如图

  

Asp.Net Oracle数据的通用操作类

  三测试ExecuteScalar

  前台代码

  

复制代码 代码如下:

  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml">

  <head runat="server">

  <title>无标题页</title>

  </head>

  <body>

  <form id="form1" runat="server">

  <div>

  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

  </div>

  </form>

  </body>

  </html>

  后台代码

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Collections;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  using xjy.DAL;

  using System.Data.SqlClient;

  using System.Data.OracleClient;

  public partial class _Default : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString1"];

  string myStr = setting.ConnectionString;

  OraDbHelper myora = new OraDbHelper(myStr);

  string shuliang;

  shuliang = myora.ExecuteScalar("select count(art_no) from article where art_no<100").ToString();

  Label1.Text = shuliang;

  }

  }

  结果如图:

  

Asp.Net Oracle数据的通用操作类

  四测试ExecuteNonQuery

  前台代码:

  

复制代码 代码如下:

  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml">

  <head runat="server">

  <title>无标题页</title>

  </head>

  <body>

  <form id="form1" runat="server">

  <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

  <asp:GridView ID="GridView1" runat="server">

  </asp:GridView>

  <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>

  <asp:GridView ID="GridView2" runat="server">

  </asp:GridView>

  <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="恢复值" />

  </div>

  </form>

  </body>

  </html>

  后台代码

  

复制代码 代码如下:

  using System;

  using System.Data;

  using System.Configuration;

  using System.Collections;

  using System.Web;

  using System.Web.Security;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  using xjy.DAL;

  using System.Data.SqlClient;

  using System.Data.OracleClient;

  public partial class _Default : System.Web.UI.Page

  {

  protected void Page_Load(object sender, EventArgs e)

  {

  ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString1"];

  string myStr = setting.ConnectionString;

  OraDbHelper myora = new OraDbHelper(myStr);

  DataTable t1 = new DataTable();

  Label1.Text = "更新前的值";

  t1 = myora.ExecuteDataTable("select art_no,descr from article where art_no=8");

  GridView1.DataSource = t1;

  GridView1.DataBind();

  if (myora.ExecuteNonQuery("update article set descr='更新描述测试值' where art_no=8")>0)

  {

  Label2.Text = "更新后的值";

  t1 = myora.ExecuteDataTable("select art_no,descr from article where art_no=8");

  GridView2.DataSource = t1;

  GridView2.DataBind();

  }

  }

  protected void Button1_Click(object sender, EventArgs e)

  {

  ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString1"];

  string myStr = setting.ConnectionString;

  OraDbHelper myora = new OraDbHelper(myStr);

  DataTable t1 = new DataTable();

  if (myora.ExecuteNonQuery("update article set descr='可怜可怜60ML/瓶' where art_no=8") > 0)

  {

  Label2.Text = "更新后的值";

  t1 = myora.ExecuteDataTable("select art_no,descr from article where art_no=8");

  GridView2.DataSource = t1;

  GridView2.DataBind();

  }

  }

  }

  结果:

Asp.Net Oracle数据的通用操作类