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

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

2009-03-08 19:14 1086 查看
Web服务器的配置:

1.安装Oracle客户端


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


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


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


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


1.通过PLSQL建立用户

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





赋给此用户OBA角色





2.通过EnterpriseManagerConsole建立用户


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

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





Asp.Net访问Oracle的简单例子

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

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

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.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>
<formid="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
{
publicpartialclass_Default:System.Web.UI.Page
{
System.Data.OracleClient.OracleConnectionobjConn;//声明一个OracleConnection对象

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

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

protectedvoidPage_Load(objectsender,EventArgse)
{

}
///<summary>
///测试连接
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
protectedvoidButton1_Click(objectsender,EventArgse)
{
try
{
objConn=newOracleConnection(strcon);//用连接字符串,实例化连接对象

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

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

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

objCmd.ExecuteNonQuery();

objConn.Close();

this.Label1.Text="成功";

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

}

///<summary>
///执行SQL语句返回数据集合
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
protectedvoidButton2_Click(objectsender,EventArgse)
{
objConn=newOracleConnection(strcon);//用连接字符串,实例化连接对象

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

System.Data.OracleClient.OracleDataAdapteradapter=newOracleDataAdapter("select*fromsys.test1",objConn);

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

adapter.Fill(ds);

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

GridView1.DataBind();

}

///<summary>
///存储过程输入、输出参数
///
///存储过程定义如下:
///
///createorreplaceproceduregetName(name_outoutvarchar2,id_ininvarchar2)is
///begin
///selectNAMEintoname_outfromtest1whereid=id_in;
///endgetName;
///
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
protectedvoidButton3_Click(objectsender,EventArgse)
{
objConn=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建立的,在这里我又重新用当前用户建立的一个属于这个用户的包
///
///包定义如下:
///包头:
///createorreplacepackagetestis

///TYPEMYCURSORISREFCURSOR;
///PROCEDUREGETLIST(cur_OUTOUTMYCURSOR);

///endtest;
///
///
///
///包体:
///createorreplacepackagebodytestis

///PROCEDUREGETLIST(cur_OUTOUTMYCURSOR)AS
///BEGIN
///OPENcur_OUTFORSELECT*FROMtest1;
///END;

///endtest;
///
///
///
///
///
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
protectedvoidButton4_Click(objectsender,EventArgse)
{
objConn=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();

}
}
}






调用结果如下图:





程序下载:

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

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

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

/article/4797802.html

/article/5069530.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航