搜索
首页 电脑/网络 程序设计 数据库

简述VS开发WEB应用程序如何连接ORACLE数据库

ORACLE数据库的问题

全部回答

2017-10-30

51 0

    一、使用OracleClient组件连接Oracle????。Net框架的System。Data。OracleClient。dll组件(ADO。Net组件),为连接和使用Oracle数据库提供了很大的方便。
  ????1、使用客户端网络服务名连接Oracle????基于业务逻辑与数据库实体的分层需要,一般要求在不同于Oracle数据库主机的客户端机器连接和使用Oracle数据库。  这种情况要么是通过C/S应用程序的客户端访问数据库的情况;要么是在B/S应用程序中,在WEB服务器端远程连接Oracle数据库服务器。
  ????通过客户端网络服务名远程连接Oracle,要求在客户端机器中安装Oracle客户端工具(安装类型可以不必选择“管理员”模式,而只需要安装运行时支持即可,为应用程序提供基本的网络服务配置工具等)。
    ????建立连接的语句比较简单,关键点为data?source的设置。这里的data?source不像SqlServer连接字串中指的是数据库名称,而是指客户端网络服务名(相关内容请参考前面有关客户端安装的文章)。
  对于本文的Oracle安装来说,data?source对应着E:Oracle_Clientoracleora92 etworkadmin nsnames。  ora配置文件中的网络服务名(出于方便试验的原因,数据库与独立的客户端工具分别安装在了同一台机器的不同目录)。
  在具体实施连接时,将根据data?source的值去该客户网络服务配置文件中查找对应项,以获取数据库服务器主机地址、端口、全局数据库名等连接信息。????建立连接的主要代码如下:????。  。
  。。。。????using?System。Data。OracleClient;????。。。。。。????//这里的“remotedb”对应于“Oracle客户端的安装与远程连接配置”一文中配置的客户端网络服务名????OracleConnection?conn=?????????new?OracleConnection("data?source=remotedb;User?Id=scott;Password=scott;");????conn。
    Open();????。。。。。。??? 对我有用[0]?丢个板砖[0]?引用?|?举报?|?管理??? RexmaxRexmax本版等级:???#3?得分:0回复于:?2012-07-24?13:37:582、本地连接和使用Oracle????本地使用Oracle是指在安装Oracle数据库的主机中连接和使用Oracle数据库。
    从安全性和负载均衡的角度考虑,这种方式是不可取的。这里仅作为实验使用。????本地连接的代码与远程连接实际上没有什么分别,只不过其data?source指向服务器端的客户网络服务名。
  对于本文的数据库安装,它指向E:Oracle_Serveroracleora92 etworkadmin nsnames。  ora文件中所定义的网络服务名(有关内容请参考“Oracle客户端的安装与远程连接配置”一文)。
  ????对于这种本地连接方式,在服务器端不能存在独立安装的客户端工具,否则data?source只会去匹配独立客户端的tnsnames。ora文件,即使找不到对应的网络服务名,也不会再去匹配服务器端的服务名。
    这不知是。Net组件的设计错误,还是故意为之,以鼓励远程连接和使用Oracle。二、一个使用Oracle存储过程的简单登录验证程序????1、创建用户表????作为实验用表,用户表admin仅包含用户名和密码两个字段。
  创建表的SQL语句如下:??????CREATE?TABLE?SCOTT。  ADMIN?("NAME"?VARCHAR2(20)?NOT?NULL,???????????"PASSWORD"?VARCHAR2(20)?NOT?NULL)?TABLESPACE?"EXAMPLE"????2、创建验证用户登录的存储过程????CREATE?OR?REPLACE??PROCEDURE?"SCOTT"。
    "P_LOGIN"?(v_Name?varchar2,????????????v_Password?varchar2,b_Passed?out?char)?as??????n_Count?number;??????begin????????select?count(*)?into?n_Count?from?admin?where?name=v_Name?and?password=v_Password;????????if?n_Count?>?0?then???????????b_Passed:='1';????????else???????????b_Passed:='0';????????end?if;??????end;????3、在Sql?Plus等sql工具中使用PL/SQL测试存储过程是否可用:????set?serveroutput?on;????declare??????v_Name?varchar2(20);??????v_password?varchar(20);??????b_Passed?char(1);????begin??????v_Name:='mxh';??????v_Password:='mxh';??????p_Login(v_Name,v_Password,b_Passed);??????if?b_Passed?='1'?then????????DBMS_OUTPUT。
    PUT_LINE('SUCCESS');??????end?if;????end;????4、创建一个登录窗口,实验C#对存储过程的调用:???(1)编写数据访问类,用于访问和操作数据库:????//DataAccess。
  cs????using?System;????using?System。  Data;????using?System。Data。OracleClient;????namespace?OraLoginProcedure????{???????public?class?DataAccess???????{??????????private?string?connStr="data?source=yourdb;User?Id=scott;Password=scott;";??????????private?OracleConnection?conn=null;??????????public?DataAccess()??????????{??????????}??????????public?DataAccess(string?strConnection)??????????{??????????????this。
    connStr=strConnection;??????????}??????????public?OracleConnection?getConnection()??????????{?????????????try?????????????{????????????????if(conn==null)???????????????????conn=new?OracleConnection(connStr);????????????????if(conn。
    State==ConnectionState。Open)???????????????????conn。Open();????????????????return?conn;?????????????}?????????????catch(OracleException?e)?????????????{????????????????throw?e;?????????????}???????????}???????????public?void?closeConnection()???????????{??????????????if(conn。
    State==ConnectionState。Open)?????????????????conn。Close();???????????}???????????//执行存储过程???????????public?void?RunProcedure(string?storedProcName,OracleParameter[]?parameters)???????????{??????????????OracleCommand?cmd=new?OracleCommand(storedProcName,getConnection());??????????????cmd。
    CommandType=CommandType。StoredProcedure;??????????????foreach(OracleParameter?parameter?in?parameters)??????????????{?????????????????cmd。
    Parameters。Add(parameter);??????????????}??????????????cmd。ExecuteNonQuery();//执行存储过程??????????????closeConnection();???????????}???????????//执行登录验证(在实际应用中应该把这种执行业务逻辑的代码与数据操作基础代码分离,以???????????//实现软件的清晰分层、增强代码的可复用性)???????????public?bool?Login(string?username,string?password)???????????{???????????????OracleParameter[]?parameters={?????????????????????new?OracleParameter("v_Name",OracleType。
    VarChar,20),?????????????????????new?OracleParameter("v_Password",OracleType。VarChar,20),?????????????????????new?OracleParameter("b_Passed",OracleType。
    Char,1)???????????????};???????????????parameters[0]。Value=username;???????????????parameters[1]。
  Value=password;???????????????parameters[0]。  Direction=ParameterDirection。Input;???????????????parameters[1]。
  Direction=ParameterDirection。Input;???????????????parameters[2]。Direction=ParameterDirection。  Output;???????????????try???????????????{??????????????????RunProcedure("P_LOGIN",parameters);??????????????????if(parameters[2]。
  Value。  ToString()?==?"1")?????????????????????return?true;??????????????????else?????????????????????return?false;???????????????}???????????????catch(Exception?e)???????????????{??????????????????throw?e;???????????????}????????????}?????????}??????????}????(2)编写登录验证的界面程序:?????????//Form1。
    cs????。。。。。。????using?System。Data;????namespace?OraLoginProcedure????{???????public?class?Login?:?System。
  Windows。Forms。Form???????{??????????private?System。  Windows。Forms。Button?button1;//登录按钮??????????private?System。
  Windows。Forms。TextBox?textBox1;//用户名输入框??????????private?System。Windows。  Forms。TextBox?textBox2;//密码输入框??????????private?System。
  Windows。Forms。Label?label1;??????????private?System。Windows。Forms。Label?label2;??????????。  。
  。。。。??????????public?Login()??????????{??????????????InitializeComponent();??????????}??????????。
  。。。。。??????????///???????????///?应用程序的主入口点。  ??????????///???????????[STAThread]??????????static?void?Main()??????????{?????????????Application。
  Run(new?Login());??????????}??????????private?void?button1_Click(object?sender,?System。  EventArgs?e)??????????{?????????????try?????????????{????????????????string?username=textBox1。
  Text。Trim();????????????????string?password=textBox2。  Text。Trim();????????????????this。
  Close();//关闭界面后就读不到其中的控件输入了????????????????DataAccess?da=new?DataAccess();????????????????if(da。
  Login(username,password))???????????????????MessageBox。  Show("Hello?" username);????????????????else???????????????????MessageBox。
  Show("Login?failed");????????????????????Application。Exit();??????????????}??????????????catch(Exception?ex)??????????????{?????????????????this。
    Close();?????????????????MessageBox。Show(ex。ToString());?????????????????Application。
  Exit();??????????????}???????????}????????}????}??? 对我有用[0]?丢个板砖[0]?引用?|?举报?|?管理??? zzahkjzzahkj本版等级:???#4?得分:0回复于:?2013-04-06?16:58:15引用?3?楼?Rexmax?的回复:2、本地连接和使用Oracle????本地使用Oracle是指在安装Oracle数据库的主机中连接和使用Oracle数据库。
    从安全性和负载均衡的角度考虑,这种方式是不可取的。这里仅作为实验使用。????本地连接的代码与远程连接实际上没有什么分别,只不过其data?source指向服务器端的客户网络服务名。
    对于本文的数据库安装,它指向E:Oracle_Serveroracleo……第三步在Sql?Plus等sql工具中使用PL/SQL测试存储过程是否可用,我的会报错如下,新手不懂,请问这是为什么?谢谢!第?8?行出现错误:ORA-06550:?第?8?行,?第?7?列:PLS-00201:?必须声明标识符?'P_LOGIN'ORA-06550:?第?8?行,?第?7?列:PL/SQL:?Statement?ignored。
  

类似问题换一批

热点推荐

热度TOP

相关推荐
加载中...

热点搜索 换一换

电脑/网络
数据库
程序设计
电脑装机
操作系统/系统故障
硬件
笔记本电脑
百度
互联网
反病毒
软件
程序设计
数据库
C/C++
VB
JAVA相关
C#/.NET
VC++
汇编语言
其他编程语言
数据库
数据库
举报
举报原因(必选):
取消确定举报