Asp.Net连接Oracle数据库的通用类orahelper.cs并且利用它对数据库查询、汇总、更新等操作演示

在一个项目中,可能用到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数据库的通用类orahelper.cs并且利用它对数据库查询、汇总、更新等操作演示_第1张图片

 

二 测试 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数据库的通用类orahelper.cs并且利用它对数据库查询、汇总、更新等操作演示_第2张图片

三测试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; } }

 

结果如图:

 

四测试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数据库的通用类orahelper.cs并且利用它对数据库查询、汇总、更新等操作演示_第3张图片

你可能感兴趣的:(oracle,数据库,server,String,asp.net,Parameters)