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 立即下载

相关推荐

别再被SpringerLink虐了!手把手教你搞定LaTeX源文件提交(附正确文件顺序和类型选择)

本文详细解析了SpringerLink投稿系统中LaTeX源文件提交的常见问题与解决方案,包括文件打包、类型选择和顺序排列等关键步骤。通过实战经验,帮助科研人员避开隐形陷阱,一次性完成LaTeX提交,提升投稿效率。特别针对`.bst`和`.cls`文件的正确处理提供了专业指导。

weixin_42522964的博客 445

C# 连接Oracle数据库方法

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

^@^lemon tea^@^ 7071

【大模型】大模型知识蒸馏 综述解读(Knowledge Distillation of Large Language Models)

知识蒸馏的(论文)方法总结。归纳了通过数据(如指令、对话、多模态)和训练方法(SFT、RL、数据增强),将复杂技能(如对齐、工具使用、多模态)蒸馏到开源模型的核心框架,附典型模型示例(如Alpaca、LLaVA)。

songxia928_928的博客 4336

C# 连接 Oracle 数据库

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

Roki_Zhang的博客 4579

轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)

C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 364

杰理SDK入门教程(二):USB升级程序

开发板升级操作指南 摘要:本文介绍了开发板程序升级的两种方式(常规升级和串口升级),重点说明了常规升级的操作步骤: 拨码设置:提供4种拨码方式(不拨/1档/2档/3档),对应不同指示灯状态和按键要求 硬件连接:强制升级工具需正确连接电脑和开发板(注意USB接口方向) 升级流程:根据拨码状态操作按键,观察指示灯变化(红灯常亮绿灯灭表示进入升级模式) 执行升级:运行SDK中的download.bat完成升级 文中还包含拨码开关说明、指示灯状态对照表以及升级原理说明,帮助用户理解升级过程。升级成功后在设备管理器可

qq_42014563的博客 1120

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

[从零开始学习FPGA编程-18]:快速入门篇 - 操作步骤2-6- VerilogHDL时序电路语法分析(以计数器为例)

目录前言:第1章 功能模块代码:counter.v第2章 驱动代码:tcounter.v前文以及阐述了VerilogHDL基本语法,本文将以modelsim自带的计数器程序来解读VerilogHDL的语法。代码路径:

文火冰糖(王文兵)的博客 7万+

c#连接oracle数据库代码

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

cocacola81的专栏 2395

Python爬虫实战:基于Scrapy与Playwright的搜狐新闻高效爬取

在当今信息爆炸的时代,网络爬虫技术已成为数据获取和分析的重要工具。作为国内领先的新闻门户网站,搜狐新闻包含了大量有价值的新闻数据,这些数据对于舆情分析、市场研究等领域具有重要意义。本文将详细介绍如何使用Python最新的爬虫技术栈(Scrapy框架结合Playwright浏览器自动化工具)来高效爬取搜狐新闻数据。pythontitle = scrapy.Field() # 新闻标题url = scrapy.Field() # 新闻链接。

2201_76125261的博客 1553

【滚雪球学数学建模】第4.1节·概率与统计建模,一文搞懂!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1349

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

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

妙手书生的博客 3642

TPAMI 2025 | 从缺失碎片到杰作:基于上下文自适应扩散的图像修复

图像修复是一项具有挑战性的任务,尤其是要确保生成的内容与图像的现有部分无缝融合。尽管最近的扩散模型展现出了潜力,但它们在保持已知区域和未知(缺失)区域之间的连贯性方面常常遇到困难。这个问题源于扩散过程中缺乏明确的空间和语义对齐,导致生成的内容无法与原始图像平滑融合。此外,扩散模型通常依赖全局学习分布,而非局部特征,这使得生成的图像部分与现有图像部分之间存在不一致。在这项工作中,作者提出了ConFill,这是一个新颖的框架,引入了上下文自适应差异(CAD)模型,以确保在整个扩散过程中,已知区域和未知区域的中间

小白学视觉 240

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

連接Oracle數據庫

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

Taskcnjia的专栏 555

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C# 连接Oracle数据库(1)

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

weixin_39031283的博客 508

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

探索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、付费专栏及课程。

余额充值