您的位置:首页 > 数据库 > Oracle

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

2009-12-19 22:54 1011 查看

在一个项目中,可能用到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();

}

}


结果如图







二 测试 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();

}

}


结果如图





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

}

}

}


结果:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: