`
terryfeng
  • 浏览: 491483 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程

阅读更多

Web服务器的配置:

1.安装Oracle 客户端

参考 Oracle 9i & PLSQL 全简体中文版数据库安装过程(图解),在选择安装的时候仅安装客户端即可

2.为安装客户端的服务器配置Net 服务

参考 Oracle 9i/10g 数据库 创建数据库 Net 配置 创建表 SQL查询 创建存储过程 (图)

3.新建一个用户,并赋予OBA角色

1.通过PL SQL 建立用户

    使用SysDBA系统用户登陆 PLSQL ,建立一个用户

    2009-03-08_185346

赋给此用户OBA角色

2009-03-08_185401

2.通过Enterprise Manager Console 建立用户

 

4.测试确认存储过程是正常的

可以右键点击存储过程,选择测试,看是否能够达到预期的效果

2009-03-08_190326

 


Asp.Net 访问 Oracle 的简单例子

1.为灵活设置,将连接字符写在web.config文件中

    <appSettings>
        <add key="oracleconn" value="User ID=terryfeng;Password=frt_2007;Data Source=test;"/>
        <add key="oracleconn" value="User ID=terryfeng;Password=frt_2007;Data Source=(DESCRIPTION = (ADDRESS_LIST = 
        (ADDRESS = (PROTOCOL = TCP)(HOST=192.168.1.200)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=test.finemoon)))" />

    </appSettings>
       字符串说明:
       需要定义Net服务:  <add key="参数名" value="User ID=用户名;Password=用户密码;Data Source=数据源;"/>   
注意:这种连接方法可能会出现权限问题请参考 我的另一篇随笔解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。”(图)
       无需定义Net服务:  <add key="参数名" value="User ID=用户名;Password=用户密码;Data Source=(DESCRIPTION = 
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = 协议)(HOST=主机)(PORT=端口)))(CONNECT_DATA=(SERVICE_NAME=服务名)))" /> 
注意: 这种方法有一个问题是,无法想上面的服务那样一次定义服务,在服务下面再定义多个连接

                           

2.为Web 应用程序 添加 System.Data.OracleClient 程序集引用

2009-03-08_184543

3.下面是测试的程序,

 

aspx 文件代码如下

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AspNetOra._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>
        <p>
            调用一个Oracle连接并执行一条语句测试是否成功<asp:Label ID="Label1" runat="server" ForeColor="Red" Text=""></asp:Label>
            <br />
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="测试连接是否成功" />
        </p>
        <p>
            调用给SQL语句执行绑定<br />
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
            <br />
            <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="返回数据集合,绑定Gridview" />
        </p>
        <p>
            输入输出参数的存储过程调用<br />
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <br />
            <asp:Button ID="Button3" runat="server" Text="z输入输出参数的存储过程" OnClick="Button3_Click" />
        </p>
        <p>
            执行返回数据集的Oracle存储过程<br />
            <asp:GridView ID="GridView2" runat="server">
            </asp:GridView>
            <asp:Button ID="Button4" runat="server" Text="执行存储过程返回数据集" OnClick="Button4_Click" />
        </p>
    </div>
    </form>
</body>
</html>

 

 

aspx.cs 文件代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data.OracleClient;

namespace AspNetOra
{
    public partial class _Default : System.Web.UI.Page
    {
        System.Data.OracleClient.OracleConnection objConn;  //声明一个OracleConnection对象

        System.Data.OracleClient.OracleCommand objCmd;  //声明一个OracleCommand对象

        string strcon = System.Configuration.ConfigurationManager.AppSettings["oracleconn"]; //从Web.config 文件里调用数据库连接字符串

        protected void Page_Load(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// 测试连接
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                objConn = new OracleConnection(strcon); //用连接字符串,实例化连接对象

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

                string strSQL = "select * from sys.test1"; //查询sys建立的test1表的内容 因为我现在用的登录用户不是sys了

                objCmd = new OracleCommand(strSQL, objConn); //用命令和连接对象建立命令实例

                objCmd.ExecuteNonQuery();

                objConn.Close();

                this.Label1.Text = "成功";

            }
            catch
            {
                this.Label1.Text = "失败";
            }


        }

        /// <summary>
        /// 执行SQL 语句返回数据集合
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button2_Click(object sender, EventArgs e)
        {
            objConn = new OracleConnection(strcon); //用连接字符串,实例化连接对象

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

            System.Data.OracleClient.OracleDataAdapter adapter = new OracleDataAdapter("select * from sys.test1", objConn);

            System.Data.DataSet ds = new System.Data.DataSet();

            adapter.Fill(ds);

            GridView1.DataSource = ds.Tables[0].DefaultView;

            GridView1.DataBind();

        }

        /// <summary>
        ///  存储过程输入、输出参数
        ///  
        ///  存储过程定义如下:
        /// 
        ///  create or replace procedure getName(name_out out varchar2 ,id_in in varchar2) is
        ///  begin
        ///    select NAME into name_out from test1 where id = id_in;
        ///  end getName;
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button3_Click(object sender, EventArgs e)
        {
            objConn = new OracleConnection(strcon); //用连接字符串,实例化连接对象

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

            OracleCommand cmd = new OracleCommand("getName", objConn);

            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            cmd.Parameters.Add("name_out", OracleType.VarChar, 20); //输出参数,注意名字要与存储过程一致

            cmd.Parameters["name_out"].Direction = System.Data.ParameterDirection.Output;

            cmd.Parameters.Add("id_in", OracleType.VarChar, 20);  //输入参数,注意名字要与存储过程一致

            cmd.Parameters["id_in"].Direction = System.Data.ParameterDirection.Input;

            cmd.Parameters["id_in"].Value = "1";  //给输入参数赋值

            cmd.ExecuteNonQuery();

            this.TextBox1.Text = cmd.Parameters["name_out"].Value.ToString(); //获得输出参数


        }

        /// <summary>
        ///  Oracle存储过程并不直接返回记录集,记录集以游标的形式通过参数返回。一个包(Packages可以包含多个存储过程,
        ///  访问存储过程时采用“包名.存储过程名”的方式。
        ///  存储过程是我上一个随笔写的Test,但是上一个存储过程是用Sys建立的,在这里我又重新用当前用户建立的一个属于这个用户的包
        ///  
        ///  包定义如下:
        ///  包头:
        ///  create or replace package test is

        ///     TYPE MYCURSOR IS REF CURSOR;
        ///     PROCEDURE GETLIST(cur_OUT OUT MYCURSOR);

        ///  end test;
        /// 
        /// 
        /// 
        ///   包体:
        ///  create or replace package body test is

        ///    PROCEDURE GETLIST(cur_OUT OUT MYCURSOR) AS
        ///    BEGIN
        ///         OPEN cur_OUT FOR SELECT * FROM test1;
        ///    END;

        ///  end test; 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button4_Click(object sender, EventArgs e)
        {
            objConn = new OracleConnection(strcon); //用连接字符串,实例化连接对象

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

            OracleCommand cmd = new OracleCommand("test.GETLIST", objConn);

            cmd.Parameters.Add("cur_OUT", OracleType.Cursor);     //注意这里的类型

            cmd.Parameters["cur_OUT"].Direction = System.Data.ParameterDirection.Output;

            cmd.CommandType = System.Data.CommandType.StoredProcedure;

            OracleDataAdapter da = new OracleDataAdapter(cmd);

            System.Data.DataSet ds = new System.Data.DataSet();

            da.Fill(ds);

            GridView2.DataSource = ds.Tables[0].DefaultView;

            GridView2.DataBind();


        }
    }
}


 

调用结果如下图:

 2009-03-08_183140

程序下载:

http://zg6bbg.blu.livefilestore.com/y1p4XetCiqhCNLBrQSqDBJACDtbAhuJ-ov70gsIZT5TzE5OwW3dtacrwopdIrIZ8VQ2iK7M0rKsm36cR10sZHOKmA/AspNetOra.rar?download

参考更多技术博客了解Oracle返回不同结果的实现方法:

http://blog.csdn.net/web_gus/archive/2004/10/13/134907.aspx

http://www.cnblogs.com/volnet/archive/2007/01/22/627190.html

http://www.cnblogs.com/cwbboy/archive/2006/03/22/356017.html

分享到:
评论

相关推荐

    asp.net使用oracle分页存储过程查询数据

    比如,连接数据库字符串,查询的sql语句等 注意:查询sql语句中必须包含rownum字段,别名是rn。rownum是Oracle关键字。 存储是来自http://blog.csdn.net/pharaohsprince/archive/2006/04/12/660800.aspx。 对存储...

    asp.net实现oracle存储过程增删改查示例

    asp.net实现oracle存储过程增删改查示例 (1)三层架构实现 (2)oracle存储过程实现增删改查 (3)oracle sql语句实现增删改查 (4)asp.net代码调用 (5)ibatis框实现增删改查 我在公司学习了一个星期的作品,...

    asp.net SQL存储过程分页

    asp.net中如何调用sql存储过程实现分页asp.net中oracle 存储过程(图文)asp.net中调用oracle存储过程的方法asp.net中IDataParameter调用存储过程的实现方法asp.net利用存储过程实现模糊查询示例分享asp.net利用存储...

    asp.net中调用oracle存储过程的方法

    一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它,下面给大家介绍下asp.net中调用oracle存储过程的方法,需要的朋友可以...

    oracle存储过程

    存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。 第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。 第三、有利于SQL语句的重用。...

    asp.net知识库

    直接从SQL语句问题贴子数据建表并生成建表语句的存储过程 从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle ...

    亮剑.NET深入体验与实战精要2

    15.5 数据库访问性能优化 562 15.5.1 选择合适的.NET数据供应器 563 15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪监视SQL Server当前链接池状态 564 15.5.4 善用数据库的存储过程 567 15.5.5 SqlDataRead和Dataset...

    亮剑.NET深入体验与实战精要3

    15.5 数据库访问性能优化 562 15.5.1 选择合适的.NET数据供应器 563 15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪监视SQL Server当前链接池状态 564 15.5.4 善用数据库的存储过程 567 15.5.5 SqlDataRead和Dataset...

    经典全面的SQL语句大全

    经典SQL语句大全 下列语句部分是Mssql语句,不可以在access中使用。  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制...

    java程序是怎么操作数据库的,可以以常用据库为例,求详细解答,最好能举例。

    在上面这个程序中我想你展示了如何使用JDBC-ODBC连接数据库,使用SQL语句生成一个表,使用SELECT、INSERT 、UPDATE语句取的、插入和更新一个表中的数据,如何通过字段名和字段索引访问数据库中的东东!我希望你能从...

    C#开发经验技巧宝典

    0976 将图片以二进制格式存储到数据库中(asp.net) 569 0977 从DataReader对象读取数据的技巧 569 0978 随机显示数据库记录 569 0979 通过DataTable获得数据表的主键 569 0980 将Access数据库转化为SQL ...

    C#编程经验技巧宝典

    111 &lt;br&gt;0184 如何在ASP.NET中获取文件的扩展名 111 &lt;br&gt;0185 如何在ASP.NET中用URL在页面之间传值 112 &lt;br&gt;0186 如何使用IsPostBack实现ASP.NET页面加载 112 &lt;br&gt;0187 如何利用输出缓存技术缓存...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    在数据库处理方面,不需要在数据层借助存储过程及数据库服务器端函数封装过多的业务逻辑,因此数据库系统采用相对精巧的MySQL[6]。 该在线博客系统服务器端如果需要布置到其他主机上,则该主机必备条件如下: 1. ...

    JDiy开发框架与javaWeb建站平台v1.0

     JDiy拥有完整的运行日志记录(包括显示SQL语句),在进行JDiy开发时,您可以使用各类日志门面(例如slf4j)来定义日志并跟踪您的开发。 JDiy官方网站及入门教程: http://jdiy.net/ JDiy在线帮助API文档: ...

    java开源包1

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

Global site tag (gtag.js) - Google Analytics