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

本文介绍如何使用ASP.NET连接Oracle数据库,执行SQL语句及调用存储过程。文章提供了详细的步骤和示例代码,包括配置连接字符串、执行基本查询、使用参数化存储过程等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

http://space.itpub.net/12639172/viewspace-564910#xspace-itemform

1.安装Oracle客户端

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

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

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

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

1.通过PL SQL 建立用户

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

赋给此用户OBA角色

2.通过Enterprise Manager Console 建立用户

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

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

ITPUB个人空间 K\*k6m


N"u
Asp.Net 访问 Oracle 的简单例子

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

<appSettings>

       <addkey="oracleconn"value="User ID=terryfeng;Password=frt_2007;DataSource=test;"/>

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

</appSettings>

字符串说明:

需要定义Net服务:  <addkey="参数名"value="User ID=用户名;Password=用户密码;Data Source=数据源;"/>  注意:这种连接方法可能会出现权限问题请参考 我的另一篇随笔解决“System.Data.OracleClient 需要 Oracle 客户端软件8.1.7 或更高版本。”(图)

无需定义Net服务:  <addkey="参数名"value="User ID=用户名;Password=用户密码;Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = 协议)(HOST=主机)(PORT=端口)))(CONNECT_DATA=(SERVICE_NAME=服务名)))"/> 注意: 这种方法有一个问题是,无法想上面的服务那样一次定义服务,在服务下面再定义多个连接

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

3.下面是测试的程序,

aspx 文件代码如下

<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="AspNetOra._Default"%><!DOCTYPEhtml PUBLIC"-//W3C//DTD XHTML 1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<headrunat="server">

   <title></title>

</head>

<body>

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

   <div>

       <p>调用一个Oracle连接并执行一条语句测试是否成功<asp:LabelID="Label1"runat="server"ForeColor="Red"Text=""></asp:Label>

           <br/>

           <asp:ButtonID="Button1"runat="server"OnClick="Button1_Click"Text="测试连接是否成功" />

       </p>

       <p>调用给SQL语句执行绑定<br/>

           <asp:GridViewID="GridView1"runat="server">

           </asp:GridView>

           <br/>

           <asp:ButtonID="Button2"runat="server"OnClick="Button2_Click"Text="返回数据集合,绑定Gridview" />

       </p>

        <p>输入输出参数的存储过程调用<br/>

            <asp:TextBoxID="TextBox1"runat="server"></asp:TextBox>

           <br/>

           <asp:ButtonID="Button3"runat="server"Text="z输入输出参数的存储过程"OnClick="Button3_Click" />

       </p>

       <p>执行返回数据集的Oracle存储过程<br/>

            <asp:GridViewID="GridView2"runat="server">

           </asp:GridView>

           <asp:ButtonID="Button4"runat="server"Text="执行存储过程返回数据集"OnClick="Button4_Click" />

       </p>

   </div>

   </form>

</body>

</html>

aspx.cs 文件代码如下

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingSystem.Data.SqlClient;usingSystem.Data.OracleClient;namespaceAspNetOra

{public partial class_Default: System.Web.UI.Page{

       System.Data.OracleClient.OracleConnectionobjConn;//声明一个OracleConnection对象System.Data.OracleClient.OracleCommandobjCmd;//声明一个OracleCommand对象stringstrcon = System.Configuration.ConfigurationManager.AppSettings["oracleconn"];//从Web.config 文件里调用数据库连接字符串protected voidPage_Load(objectsender,EventArgse)

       {

 

       }///<summary>

       ///测试连接/// </summary>

       /// <param name="sender"></param>

       /// <param name="e"></param>protected voidButton1_Click(objectsender,EventArgse)

       {try{

                bjConn =newOracleConnection(strcon);//用连接字符串,实例化连接对象objConn.Open();//打开数据库连接stringstrSQL ="select * from sys.test1";//查询sys建立的test1表的内容 因为我现在用的登录用户不是sys了objCmd=newOracleCommand(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 voidButton2_Click(objectsender,EventArgse)

       {

            bjConn =newOracleConnection(strcon);//用连接字符串,实例化连接对象objConn.Open();//打开数据库连接System.Data.OracleClient.OracleDataAdapteradapter =newOracleDataAdapter("select * from sys.test1", objConn);

 

            System.Data.DataSetds =newSystem.Data.DataSet();

 

            adapter.Fill(ds);

 

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

 

            GridView1.DataBind();

 

       }///<summary>

       ///存储过程输入、输出参数/// 

       ///存储过程定义如下:///

       ///create orreplace 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 voidButton3_Click(objectsender,EventArgse)

       {

            bjConn =newOracleConnection(strcon);//用连接字符串,实例化连接对象objConn.Open();//打开数据库连接OracleCommandcmd =newOracleCommand("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 orreplace 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>

        /// <paramname="sender"></param>

       /// <param name="e"></param>protected voidButton4_Click(objectsender,EventArgse)

       {

            bjConn =newOracleConnection(strcon);//用连接字符串,实例化连接对象objConn.Open();//打开数据库连接OracleCommandcmd =newOracleCommand("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;OracleDataAdapterda =newOracleDataAdapter(cmd);

 

            System.Data.DataSetds =newSystem.Data.DataSet();

 

            da.Fill(ds);

 

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

 

            GridView2.DataBind();

 

 

       }

   }

}

 

调用结果如下图:

程序下载:AspNetOra.rar

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值