在Oracle数据库上使用Visual Studio 构建 NET应用程序.docx
- 文档编号:27673424
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:16
- 大小:336.23KB
在Oracle数据库上使用Visual Studio 构建 NET应用程序.docx
《在Oracle数据库上使用Visual Studio 构建 NET应用程序.docx》由会员分享,可在线阅读,更多相关《在Oracle数据库上使用Visual Studio 构建 NET应用程序.docx(16页珍藏版)》请在冰豆网上搜索。
在Oracle数据库上使用VisualStudio构建NET应用程序
在Oracle数据库上使用VisualStudio2005或2008构建.NET应用程序
随着Microsoft的.NETFramework的日益流行,许多开发人员迫切希望了解关于将.NET应用程序与Oracle集成的最佳方法的信息——不仅在基本连通性方面,还包括与使用VisualStudio2005或2008进行有效应用程序的开发的关系。
您将有机会应用您在三个上机操作实践中学到的内容,难度从相对简单到比较复杂不等。
本文中的屏幕快照出自VisualStudio2005
.NET数据提供程序
除了基本的Oracle客户端连通性软件,.NET应用程序还需要使用称为受管理的数据提供程序(其中“受管理的”指的是代码由.NET框架管理)的工具。
数据提供程序是指.NET应用程序代码和Oracle客户端连通性软件之间这一层。
在几乎所有情况下,最优的性能都是通过使用为特定数据库平台优化了的提供程序而不是一般的.NETOLEDB数据提供程序实现的。
Oracle、Microsoft和第三方供应商都提供了针对Oracle产品进行了优化的.NET数据提供程序。
Oracle和Microsoft免费提供其Oracle数据提供程序。
(Microsoft为.NETFramework2.0提供的提供程序包含在该框架中,但仍需安装Oracle客户端软件)。
在本文中,我们将使用OracleDataProviderfor.NET(ODP.NET),该提供程序包含在Oracle数据库中或单独提供下载。
ODP.NET提供标准的ADO.NET数据访问,同时提供特定于Oracle数据库的特性,如XMLDB、数据访问性能优化以及真正应用集群连接池。
安装ODP.NET和Oracle客户端软件后,即可开始使用VisualStudio进行应用程序开发。
在开始开发前,请先确认客户端连通性。
如果您在VS.NET所在的计算机上能够使用Oracle客户端软件(如SQL*Plus)连接到Oracle,则证明您已经正确地安装和配置了Oracle客户端软件。
VisualStudio2005创建工程
现在我们来创建一个用于从Oracle数据库中检索数据的ODP.NET应用程序。
然后,我们将了解如何使用ODP.NET执行错误处理,以及如何处理其他数据检索情况。
在启动VisualStudio之后,第一个任务是创建一个工程。
可以按如下所示选择文件|新建|项目,也可以单击文件正下方的新建项目按钮。
图1在VisualStudio2005中创建新工程
出现一个新建项目对话框。
在对话框左侧的项目类型下,选择您的编程语言。
在这个例子中,我们选择“VisualC#”。
在VisualStudio已安装的模块下方的右侧,选择一个工程模板。
为简单起见,我们选择“Windows应用程序”。
图2使用新建项目对话框
添加引用
由于我们的工程必须与Oracle数据库连接,因此必须添加一个到包含所选数据提供程序的ODP.NETDLL的引用。
在解决方案资源管理器内,选择工程名称OraWinApp,右键单击并选择添加引用。
或者,您可以转至菜单栏并选择项目,然后选择添加引用。
图3添加引用
图4选择ODP.NET管理的数据提供程序
ODP.NET位于Oracle.DataAccess组件名下。
从列表中选择Oracle.DataAccess,然后单击确定使工程知道ODP.NET数据提供程序。
C#语句
添加引用之后,标准的做法是添加C#using语句。
从技术上讲,这些语句不是必需的,但通过它们可以让您无需使用冗长的完全限定名来引用数据库对象。
按照惯例,这些语句出现在代码文件的顶部或顶部附近,在命名空间或类声明之前。
usingOracle.DataAccess.Client;//C#ODP.NETOraclemanagedprovider
usingSystem.Data.OracleClient;//添加引用System.Data.OracleClient
添加完引用之后,Intellisense将帮助您完成using语句的添加.
连接字符串和对象
Oracle连接字符串和Oracle名称解析是不可分的。
假定您在tnsnames.ora文件中定义了一个数据库别名OraDb,如下:
OraDb=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=20110315-1026)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DEMO)))//HOST是你计算机名称,SERVICE_NAME是你的数据库名称,其他的一般不用该;
OraDb别名定义了客户端的数据库地址连接信息。
要使用上面所述的在tnsnames.ora文件中定义的OraDb别名,您需要使用以下语法:
stringoradb="DataSource=OraDb;UserId=scott;Password=tiger;";//Id和Password是自己设定的用户名和口令
Connection对象
有两种方法,代码如下:
第一种:
StringstrConn="DataSource=demo;UserId=system;Password=man2;";//寻找数据库地址OracleConnectionconn=newOracleConnection(strConn);//连接对象的实例化
conn.Open();
Console.WriteLine("已经连接上数据库");
Console.WriteLine("数据库连接状态是:
{0}",conn.State.ToString());
Console.Read();
第二种:
stringstrConn="DataSource=(DESCRIPTION="//这样就不需使用tnsnames.ora文件。
//只需使用在tnsnames.ora文件中定义别名的语句替换别名即可
+"(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=20110315-1026)(PORT=1521)))"
+"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DEMO)));"
+"UserId=system;Password=man2;";
conn.ConnectionString=strConn;
conn.Open();
Console.WriteLine("已经连接上数据库");
Console.WriteLine("数据库连接状态是:
{0}",conn.State.ToString());
Console.Read();//运行结果如下
Command对象
Command对象用于指定执行的SQL命令文本—SQL字符串或存储过程。
与Connection对象类似,它必须从其类中完成实例化,并拥有一个重载的构造函数。
代码如下:
OracleConnectionconn=newOracleConnection();//创建连接对象
conn.ConnectionString="DataSource=demo;UserId=system;Password=man2;";//数据源
conn.Open();//打开连接
Console.WriteLine("连接上数据库:
\n");
OracleCommandcmd=newOracleCommand("select*fromstudent",conn);//执行命令
OracleDataReaderdrNew=cmd.ExecuteReader();//获取数据
if(drNew.HasRows)
{
while(drNew.Read())
{
Console.WriteLine(drNew[1].ToString());//输出数据的第二行
}
}
conn.Close();
Console.WriteLine("\n数据库关闭");
Console.Read();
运行结果如下
利用DataReader检索多个值
到目前为止,我们的示例仅说明了如何检索单个值。
OracleDataReader可以检索多列和多行的值。
首先执行多列、单行查询:
代码如下:
StringstrConn="DataSource=demo;UserId=system;Password=man2;";
OracleConnectionconn=newOracleConnection(strConn);//创建连接对象
stringstrOra="select*fromstudent";//准备要执行的命令
OracleCommandcmd=newOracleCommand(strOra,conn);//创建OracleCommand对象
conn.Open();
OracleDataReaderdr=cmd.ExecuteReader();
if(dr.HasRows)//如果读出的结果中有数据
{
while(dr.Read())//循环读取,并将数据显示到控制台
{
Console.WriteLine("{0},{1}",dr["SID"],dr["SNAME"]);//输出数据
}
}
else//如果读出结果中不含有任何的行
{
Console.WriteLine("没有读出数据");
}
conn.Close();
Console.Read();
运行结果如下:
上机操作1:
从数据库中检索数据
在开始之前,您必须已经创建一个工程并添加了引用,如本文前面所述。
1.接着向Windows表单中添加一个按钮控件和一个标签控件。
务必在这些控件的上方留出空间,以便在上机操作2中添加其他控件。
∙添加代码,它们用于从Oracle数据库中检索数据并在表单上显示结果。
将代码放在按钮的单击事件处理程序中。
开始这项任务的最容易的方式是双击该按钮,因为它将为事件处理程序创建一个stub。
∙stringstrConn="DataSource=(DESCRIPTION=(ADDRESS_LIST="
∙+"(ADDRESS=(PROTOCOL=TCP)(HOST=20110315-1026)(PORT=1521)))"
∙+"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DEMO)));"
∙+"UserId=system;Password=man2;";
∙
∙OracleConnectionconn=newOracleConnection(strConn);//
∙conn.Open();
∙OracleCommandcmd=newOracleCommand();
∙cmd.Connection=conn;
∙cmd.CommandText="select*fromstudent";
∙cmd.CommandType=CommandType.Text;
∙OracleDataReaderdr=cmd.ExecuteReader();
∙dr.Read();//replacethisstatementinnextlab
∙
∙label1.Text=dr["SNAME"].ToString();//removeinnextlab
∙dr.Dispose();
∙cmd.Dispose();
∙conn.Dispose();//关闭清楚
∙运行应用程序。
单击按钮。
您将看到以下内容
上机操作2:
增加交互性
现在在代码中实现了数据库访问的基本功能,下一步是为应用程序增加交互性。
与运行硬编码的查询不同,可以添加一个文本框来接受用户输入的信息。
1.向表单中添加一个文本框控件和另一个标签控件(如下所示):
将Label2控件的文本属性设置为EnterDeptno:
并确保没有设置TextBox1的Text属性。
修改定义选择字符串的代码:
stringstrConn="DataSource=(DESCRIPTION=(ADDRESS_LIST="
+"(ADDRESS=(PROTOCOL=TCP)(HOST=20110315-1026)(PORT=1521)))"
+"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DEMO)));"
+"UserId=system;Password=man2;";
OracleConnectionconn=newOracleConnection(strConn);//
conn.Open();
OracleCommandcmd=newOracleCommand();
cmd.Connection=conn;
cmd.CommandText="select*fromstudent="+textBox1.Text;
cmd.CommandType=CommandType.Text;
OracleDataReaderdr=cmd.ExecuteReader();
if(dr.Read())//C#
{
label1.Text=dr["SNAME"].ToString();;
}
else
{
label1.Text="namenotfound";
}
label1.Text=dr["SNAME"].ToString();//removeinnextlab
dr.Dispose();
cmd.Dispose();
conn.Dispose();//关闭清楚
上机操作3:
使用OracleDataReader检索多列和多行
现在检索了单个值,下一步是使用OracleDataReader检索多列和多行。
在表单中添加一个ListBox控件来显示结果。
1.在表单中添加一个ListBox控件。
重新调整控件的大小,填满表单的大部分宽度(如下所示)。
代码如下:
stringstrConn="DataSource=(DESCRIPTION=(ADDRESS_LIST="
+"(ADDRESS=(PROTOCOL=TCP)(HOST=20110315-1026)(PORT=1521)))"
+"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=DEMO)));"
+"UserId=system;Password=man2;";
OracleConnectionconn=newOracleConnection(strConn);//
conn.Open();
OracleCommandcmd=newOracleCommand();
cmd.Connection=conn;
cmd.CommandText="select*fromstudent="+textBox1.Text;
cmd.CommandType=CommandType.Text;
OracleDataReaderdr=cmd.ExecuteReader();
if(dr.Read())//C#
{
label1.Text=dr["SNAME"].ToString();;
}
else
{
label1.Text="namenotfound";
}
label1.Text=dr["SNAME"].ToString();//removeinnextlab
dr.Dispose();
cmd.Dispose();
conn.Dispose();//关闭清楚
以上数据都是个人的student表格,学习者由于数据库的区别,显示的结果也有差异。
Student表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在Oracle数据库上使用Visual Studio 构建 NET应用程序 Oracle 数据库 使用 Visual NET 应用程序
![提示](https://static.bdocx.com/images/bang_tan.gif)