C#连接Oracle数据库的简单应用

C#连接操作Oracle数据库详解 通过使用OracleConnection、OracleCommand和OracleDataReader等类,您可以轻松地建立数据库连接、执行查询和执行SQL命令。在上述代码中,您需要将"YourOracleDataSource"替换为您的Oracle数据库连接信息,包括主机名、端口、服务名等。导入命名空间:在C#代码中,您需要导入Oracle.DataAccess.Client命名空间,以便使用Oracle数据库相关的类和方法。在上述代码中,您需要将"YourTableName"替换为您要查询的实际表名。 阅读详情

一、使用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_Client\oracle\ora92\network\admin\tnsnames.ora配置文件中的网络服务名(出于方便试验的原因,数据库与独立的客户端工具分别安装在了同一台机器的不同目录)。在具体实施连接时,将根据data source的值去该客户网络服务配置文件中查找对应项,以获取数据库服务器主机地址、端口、全局数据库名等连接信息。

    建立连接的主要代码如下:

    ......

    using System.Data.OracleClient;

    ......

    //这里的“remotedb”对应于“Oracle客户端的安装与远程连接配置”一文中配置的客户端网络服务名

    OracleConnection conn=

         new OracleConnection("data source=remotedb;User Id=scott;Password=scott;");
    conn.Open();

    ......

    2、本地连接和使用Oracle

    本地使用Oracle是指在安装Oracle数据库的主机中连接和使用Oracle数据库。从安全性和负载均衡的角度考虑,这种方式是不可取的。这里仅作为实验使用。

    本地连接的代码与远程连接实际上没有什么分别,只不过其data source指向服务器端的客户网络服务名。对于本文的数据库安装,它指向E:\Oracle_Server\oracle\ora92\network\admin\tnsnames.ora文件中所定义的网络服务名(有关内容请参考“Oracle客户端的安装与远程连接配置”一文)。

    对于这种本地连接方式,在服务器端不能存在独立安装的客户端工具,否则data source只会去匹配独立客户端的tnsnames.ora文件,即使找不到对应的网络服务名,也不会再去匹配服务器端的服务名。这不知是.Net组件的设计错误,还是故意为之,以鼓励远程连接和使用Oracle。

二、使用OleDB组件连接和访问Oracle数据库

    OleDB组件是通过Oracle OleDB驱动程序(OraOLEDB.dll)连接和访问Oracle数据库,使用OleDB驱动的前提也是要在客户端安装运行时环境。可以采用自定义的客户端安装方式,安装包括OraOLEDB.dll等在内的必须的文件,可以不必安装包括配置客户网络服务等的客户端工具。在这种情况下,OleDB的连接字串及简单访问数据库的代码如下所示:

    ......

    using System.Data.OleDb;

    ......

    //这里的Data Source直接被赋值为类似tnsnames.ora文件中网络服务名定义的内容,不再需要客户端

    //的配置文件tnsnames.ora(OracleClient也可以这样处理)

    OleDbConnection conn=
         new OleDbConnection("Provider=OraOLEDB.Oracle.1;Server=localhost;

              Data  Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)

                (HOST = localhost)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = mydb.bawei)));

              User ID=scott;Password=scott;");
    conn.Open();
    OleDbCommand comm=new OleDbCommand("select * from scott.emp",conn);
    OleDbDataReader dr=comm.ExecuteReader();

    Console.WriteLine("姓名      职位");
    while(dr.Read())
    {
          Console.WriteLine(dr.GetString(1)+"   "+dr.GetString(2));

    }
    Console.ReadLine();
    dr.Close();
    conn.Close();

    ......

    使用OleDB组件可以获得比OracleClient更高的效率和性能,因为OleDB是比ADO.NET更底层的组件,ADO.NET也要通过OleDB获取数据。

三、一个使用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();

          }

          ......

          /// <summary>
          /// 应用程序的主入口点。
          /// </summary>
          [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();
              }
           }
        }
    }

C#连接Oracle数据库的方法 本文实例讲述了C#连接Oracle数据库的方法。分享给大家供大家参考。具体实现方法如下: //1、添加引用 System.data.oracleClient //2、设置连接字符串 data source是服务名(也就是在客户端sqlplus中需要输入的主机字符串) //3、以下用法和sqlserver Access 用法一直 string strConn = data source=oamis;user=scott;password=tiger;; OracleConnection conn = new OracleConnection(strConn); conn.Open(); O 立即下载

相关推荐

#1机器学习(西瓜书)自学记录

《机器学习 》 Datawhale 组队学习, 吃瓜自学笔记。

qq_74168740的博客 1149

C# 连接Oracle数据库方法

C# 连接Oracle数据库方法 Oracle.ManagedDataAccess.dll

^@^lemon tea^@^ 7071

“挑战杯”大赛“揭榜挂帅”赛道-baseline解析

在这个脚本中,txt文件的保存路径为'yolov7/datasets/Fatigue_driving_detection/txt_labels/',而xml文件的路径为'./label_xml/'。标注图片后的产物是会给每一个图片对应生成一个xml格式的文件,但是如果要用yolo框架去训练模型,输入的数据必须是txt格式,因此这里有一步转换格式的过程。注意看:obs这里有三个文件夹,第一个是关键帧的文件夹A,第二个是标注时输出的位置为文件夹B,第三个是智能标注后和手动标注的合集文件夹C。

m0_62899814的博客 2321

C# 连接 Oracle 数据库

C# 连接 Oracle 数据库 C# 连接数据库 C# 数据库连接 Oracle.DataAccess.dll 连接数据库

Roki_Zhang的博客 4579

告别乱码!手把手教你用docx4j实现Word转PDF(附完整中文字体配置)

本文详细介绍了如何使用纯Java库docx4j实现Word到PDF的精准转换,并重点解决了中文乱码这一核心痛点。文章提供了从环境搭建、核心代码实现到中文字体配置的完整教程,特别针对Linux服务器部署场景,给出了详细的字体安装与映射方案,确保跨平台转换的稳定性和准确性。

nokia的博客 1153

深入解析FastDDS:SHM与DATA-SHARING传输层的性能对比与实现细节

本文深入对比了FastDDS中SHM与DATA-SHARING两种传输层的实现机制与性能差异。SHM采用端口化共享内存模型,存在两次数据拷贝;而DATA-SHARING通过共享历史实现真正的零拷贝,大幅降低延迟与CPU占用。文章结合实战测试数据,为机器人、自动驾驶等高实时性场景提供了关键的性能优化选型与配置指南。

weixin_28358083的博客 232

Connect To Oracle Database With No Oracle Client Install Needed--转载

C#: Connect To Oracle Database With No Oracle Client Install Needed (Winform DataGridView Loading Example) 原址:http://omegacoder.com/?p=445 Sep 29 2009 This ...

weixin_30707875的博客 178

循环卷积和线性卷积(矩阵视角)

矩阵视角的循环卷积核线性卷积

shengsong 3578

c#连接oracle数据库代码

一、安装oracle客户端程序 如果是windows版本可以到这里下载 http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html 配置环境变量 一共设置以下三个环境变量(以解压缩目录c:\instantclient为例) 环境变量名                   ...

cocacola81的专栏 2395

从一根USB线缆说起:深入浅出聊聊那些影响信号完整性和EMC性能的‘小细节’(双绞、屏蔽、360度搭接全解析)

本文深入探讨了USB线缆中影响信号完整性和EMC性能的关键细节,包括双绞线绞距、屏蔽层设计和360度搭接工艺。通过实验数据和实用技巧,揭示了这些‘小细节’如何显著影响高频信号质量和电磁兼容性,为工程师提供了从选购到系统设计的全面指南。

weixin_30824479的博客 439

5.7 BGP属-ORIGIN

注意:当去往同一个目的地存在多条不同Origin属性的路由时,在其他条件都相同的情况下,BGP将按如Origin的下顺序优选路由:IGP > EGP > Incomplete。通过以上输出可以看到路由表选择了R3发过来的路由,因为R1的路由的起源为?通过以上输出我们可以看到针对于1.1.1.1这条路由有两条,从R1和R3传过来的起源都属于IGP。(4)把从R1传过来的路由的起源改为incomplete。通过以上输出可以看到,从R1传过来的路由是最优的。(2)在R2上查看1.1.1.1的路由详细信息。

lwljh134的博客 308

VS环境下C#控制台远程连接oracle数据库无需安装客户端非常简单

VS环境下C#控制台远程连接oracle数据库无需安装客户端非常简单 新增加的引用:Oracle.ManagedDataAccess 并在命名空间增加:using Oracle.ManagedDataAccess.Client;直接上代码: public void setConnectionString() { string hostaddres

妙手书生的博客 3642

基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)

基于FPGA的时间数字转换(TDC)设计,此为第五篇:基于Carry4的高精度TDC设计。提供工程文件及MATLAB测试分析代码

sdau2005的博客 8803

c# oracle datasource,C# 连接Oracle 数据库 示例源码下载

【实例简介】C# 实现Oracle 数据库的 增删改查 操作【实例截图】【核心代码】using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using Sy...

weixin_36215364的博客 394

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

連接Oracle數據庫

之前我也有談論過.net中對不同數據庫的連接操作,這次單談談Oracle,其實你要連接到Oracle數據庫是要要求有個Oracle.DataAccess.dll。可以到Oracle網站下載。如果你安裝了Oracle了,也會有這個dll了。引入就OK因為是測試,學習。所以代碼也簡單。using System;using System.Collections.Generic;using

Taskcnjia的专栏 555

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# 连接Oracle数据库(1)

之前做项目一直使用sql server ,参加面试以后他们公司使用oracle数据库,之前真的没接触过oracle数据库,用了一周时间终于理清楚oracle数据库的安装和简单的使用。然后想实现一下简单的增删改查,一下是简单的数据库连接: 1.创建一个控制台应用程序: 2.点击鼠标右键“引用”,选择“NuGet”程序包 3.搜索并下载:Oracle.ManagedDataAccess包 4.写一个连接数据库的方法: 5.调用此方法 完整代码如下: using Oracle.

weixin_39031283的博客 508

探索C与Oracle数据库的完美结合:一个开源项目的深度解析

探索C#与Oracle数据库的完美结合:一个开源项目的深度解析 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代软件开发中,数据库连接与操作是不可或缺的一部分。为了帮助开发者更好地理解和掌握C#与Oracle数据库的交互,我们推出了一个开源项目——C#连接Oracle数据库实例。该项目提供了一个完整的C#项目示例,展示了如何使用Oracle.ManagedData...

gitblog_09722的博客 389

C#连接Oracle简单教程

要点:本文主要介绍如何使用最简单的方法让C#操作Oracle数据库,不需要安装Oracle客户端之类的东西。 最近由于工作需要,要使用C#从SQLServer向Oracle导入数据。之前没有怎么接触过Oracle数据库,结果一上来就遇到了问题,微软自带的Oracle相关程序集不能独自搞定数据库连接问题。 在网上拜读了很多大神的文章,终于找到了自认为最简单的方法,现简单描述如下: 1.下载要使...

weixin_30338461的博客 140

oracle全托管驱动Oracle.ManagedDataAccess

Download ODP.NET, Managed Driver .zip file to a directory for staging the install.Unzip the download to expand its contents into the target directory.Run configure.bat to GAC and configure machine.con

攻城狮的博客 4289
上一篇: 修改wpf中动画的默认帧间隔以提升性能,默认为60帧每秒
下一篇: OracleClient和OleDb
fighter_yy
博客等级 码龄20年 22粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值