C#Winfrom程序鏈接Oracle數據庫(免安裝Oracle客戶端)

參考了文章:http://xuzhihong1987.blog.163.com/blog/static/267315872011426336943/html

    如今說說個人作法:Winform程序若是想要鏈接Oracle數據庫,只須要包含相關的dll庫便可。以下是我包含的dll,部分dll可能不須要用到,有待測試:算法

沒有dll的話能夠到Oracle官網下載Install Client(http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html)
下載時要注意選擇與你係統對應的版本。
把壓縮包裏面的dll文件包含到程序運行的目錄下就能夠了。sql

鏈接Oracle數據庫參考代碼以下:
添加引用:using System.Data.OracleClient;  (.net framwork 4能找到此引用,部分版本找不到此引用)數據庫

             string oradb = "Data Source=(DESCRIPTION="
             + "(ADDRESS=(PROTOCOL=TCP)(HOST=MyComputerName)(PORT=1521))"
             + "(CONNECT_DATA=(SERVICE_NAME=DemoDB)));"
             + "User Id=SYSTEM;Password=************;";
             
            try
            {
                OracleConnection conn = new OracleConnection(oradb);
                conn.Open();
                
                string sql = " select * from DemoOP.T_TEST "; // DemoOP是表T_TEST的user
                OracleCommand cmd = new OracleCommand(sql, conn);
                cmd.CommandType = CommandType.Text;
               
                //大容量數據,能夠進行修改,使用DataSet和DataAdapter
                DataSet ds = new DataSet();
                OracleDataAdapter da = new OracleDataAdapter();
                da.SelectCommand = cmd;
                da.Fill(ds);
                dataGridView1.DataSource = ds.Tables[0] ;

                //使用DataReader,讀取數據
                OracleDataReader dr = cmd.ExecuteReader();
                while (dr.Read()) // C#
                {
                    comboBox1.Items.Add(dr["NAME"].ToString());
                }
             dr.Close();
                conn.Dispose(); //Close()也能夠。
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {

            }

 

鏈接數據庫時報「嘗試加載 oracle客戶端庫時引生BadImageFormatExceiption。若是在安裝32位oracle 客戶端組件時的狀況下以64位模式運行,將出現問題」。數組

分析緣由是:個人系統是Win7 64位的,Winform工程目標平臺設置是X86,修改設置從新編譯便可。具體設置以下:選擇工程名-->屬性-->生成,目標平臺選爲Any CPU,運行沒問題,能正常連上Oracle.session

 

 

出處:https://blog.csdn.net/talentworld/article/details/12559591數據結構

=======================================================================================oracle

一、在oracle 安裝目錄下 找到 Oracle.DataAccess.dll
      在winform項目下添加引用,而後 using Oracle.DataAccess.Client;
      其餘的都不用動。
      鏈接字符串中 user=xxx 就改爲user id=xxx
      把原來 Using 的System.Data.OracleClient去掉。
二、測試鏈接代碼:ide

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Common;
using Oracle.DataAccess.Client;
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string ConnectionString = "Data Source=127.0.0.1/orcl;user id=system;password=123456;";//寫鏈接串
            OracleConnection conn = new OracleConnection(ConnectionString);//建立一個新鏈接
            try
            {
                conn.Open();
                OracleCommand cmd = conn.CreateCommand();
                if (conn.State == ConnectionState.Open)
                {
                    textBox1.Text = "鏈接成功";
                }
            }
            catch (Exception ee)
            {
                System.Diagnostics.Debug.WriteLine(ee.Message); //若是有錯誤,輸出錯誤信息
            }
            finally
            {
                conn.Close(); //關閉鏈接
            }
        }
    }
}

 

出處:https://blog.csdn.net/zwfp1314/article/details/81129186函數

=======================================================================================

[winform] 鏈接Oracle數據庫

  1. System.Data.OracleClient,已過期,瞭解便可不推薦使用.
  2. Oracle.DataAccess.Client也叫ODP.net,須要區分x86/x64版本
  3. Oracle.ManagedDataAccess.dll,我通常使用第三種.
  • ManagedDataAccess
  1. 項目添加Oracle.ManagedDataAccess.dll,能夠直接從Oracle官網下載該模塊,也能夠經過Nuget包管理器直接安裝,選擇第一個,而後安裝.

     

      

  2. 直接調用,這裏我分開寫了,把獲取Connection單獨放在一個函數裏.同時由於寫的程序只是在公司內部使用,因此並無考慮防止sql注入。

            //獲取Connection
            public OracleConnection OracleConn(String[] str)
            {
                //經過讀取字符數組鏈接不一樣的數據庫
                String connString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+
                    str[4]+")(PORT=1521))(CONNECT_DATA=(SERVICE_NAME = "+str[0]
                    +")));User Id="+str[2]+";Password="+str[3]+";";
                OracleConnection conn = new OracleConnection(connString);
                return conn;
            }
    
            //鏈接數據庫進行操做,用try-catch防止鏈接的錯誤致使整個程序崩潰
             OracleConnection conn = OracleConn(PublicValue.str);
                    try
                    {
                        conn1.Open();
                        string s_sql1 = "";
                        for (i = 0; i <m; i++)
                        {
                           增刪改查
                        }
                        conn1.Close();
                    }
                    catch(Exception exception)
                    {
                        MessageBox.Show(exception.Message, "失敗");
                        conn1.Close();
                    }
                }    

     


具體使用方法的參考資料

 

出處:https://www.jianshu.com/p/c77a100258f8

=======================================================================================

C#鏈接Oracle的方法實例總結

這篇文章主要介紹了C#鏈接Oracle的方法,結合實例形式總結分析了幾種常見的C#鏈接Oracle數據庫的操做技巧與相關注意事項,須要的朋友能夠參考下

本文實例總結了C#鏈接Oracle的方法。分享給你們供你們參考,具體以下:

1、經過System.Data.OracleClient(須要安裝Oracle客戶端並配置tnsnames.ora)

1. 添加命名空間System.Data.OracleClient引用

2.

1
using System.Data.OracleClient;
 

3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string connString = "User ID=IFSAPP;Password=IFSAPP;Data Source=RACE;" ;
OracleConnection conn = new OracleConnection(connString);
try
{
   conn.Open();
   MessageBox.Show(conn.State.ToString());
}
catch (Exception ex)
{
   ShowErrorMessage(ex.Message.ToString());
}
finally
{
   conn.Close();
}
 

2、經過System.Data.OracleClient(須要安裝Oracle客戶端不需配置tnsnames.ora)

1. 添加命名空間System.Data.OracleClient引用

2.

1
using System.Data.OracleClient;
 

3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string connString = "User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACE)))" ;
OracleConnection conn = new OracleConnection(connString);
try
{
   conn.Open();
   MessageBox.Show(conn.State.ToString());
}
catch (Exception ex)
{
   ShowErrorMessage(ex.Message.ToString());
}
finally
{
   conn.Close();
}
 

3、經過System.Data.OleDb和Oracle公司的驅動

1. 添加命名空間System.Data.OracleClient引用

2.

1
using System.Data.OleDb;
 

3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string connString = "Provider=OraOLEDB.Oracle.1;User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACE)))" ;
OleDbConnection conn = new OleDbConnection(connString);
try
{
   conn.Open();
   MessageBox.Show(conn.State.ToString());
}
catch (Exception ex)
{
   ShowErrorMessage(ex.Message.ToString());
}
finally
{
   conn.Close();
}
 

4、經過System.Data.OleDb和微軟公司的Oracle驅動

1. 添加命名空間System.Data.OracleClient引用

2.

1
using System.Data.OleDb;
 

3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string connString = "Provider=MSDAORA.1;User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACE)))" ;
OleDbConnection cnn = new OleDbConnection(connString);
try
{
   conn.Open();
   MessageBox.Show(conn.State.ToString());
}
catch (Exception ex)
{
   ShowErrorMessage(ex.Message.ToString());
}
finally
{
   conn.Close();
}
 

備註:

a.XP操做系統已經安裝了微軟公司的Oracle驅動C:\Program Files\Common Files\System\Ole DB\msdaora.dll

b.該驅動須要Oracle客戶端的三個文件(oraocixe10.dll、oci.dll、ociw32.dll)放在System32下便可

5、使用ODP鏈接

1. 下載安裝ODP.NET(http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html)

2. 安裝徹底成後會產生一序列文件。

3. 找到這個安裝目錄,打開文件夾%ORACLE_HOME%\Network\Admin在這個下面創建一個tnsnames.ora的文件,其內容能夠參考其下的Sample目錄下面的配置

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Oracle.RACE =
(DESCRIPTION=
   (ADDRESS_LIST=
    (ADDRESS=
     (PROTOCOL=TCP)
     (HOST=127.0.0.1)
     (PORT=1521)
    )
   )
   (CONNECT_DATA=
    (SID=RACE)
    (SERVER=DEDICATED)
   )
)
 

Oracle.RACE爲鏈接字符串名稱,能夠隨便取。等號後面的字符串能夠在Enterprise Manager Console工具中鏈接數據庫後的TNS描述符中拷過來

4. 引用Oracle.DataAccess命名空間

5.

1
using Oracle.DataAccess.Client;
 

6. 示例代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string connString = "DATA SOURCE=Oracle.RACE;PERSIST SECURITY INFO=True;USER ID=IFSAPP;password=IFSAPP" ;
OracleConnection conn = new OracleConnection(connString);
try
{
   conn.Open();
   OracleCommand cmd = new OracleCommand(cmdText,conn);
   OracleDataReader reader = cmd.ExecuteReader();
   this .DataGridView1.DataSource = reader;
   this .DataGridView1.DataBind();
}
catch (Exception ex)
{
   ShowErrorMessage(ex.Message.ToString());
}
finally
{
   conn.Close();
}
 

6、使用第三方驅動

第三方驅動有 Devart,下載驅動 http://www.devart.com/dotconnect/oracle/,可是是商業版,須要購買許可或破解

鏈接格式 User ID=myUsername;Password=myPassword;Host=ora;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;

1. 引用Devart.Data.Oracle命名空間

2.

1
using Devart.Data.Oracle;
 

3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
OracleConnection conn = new OracleConnection();
conn.ConnectionString = "" ;
conn.Unicode = true ;
conn.UserId = "IFSAPP" ;
conn.Password = "IFSAPP" ;
conn.Port = 1521;
conn.Server = "127.0.0.1" ;
conn.Sid = "RACE" ;
try
{
   conn.Open();
   //execute queries, etc
}
catch (Exception ex)
{
   ShowErrorMessage(ex.Message.ToString());
}
finally
{
   conn.Close();
}
 

更多關於C#相關內容感興趣的讀者可查看本站專題:《C#程序設計之線程使用技巧總結》、《C#操做Excel技巧總結》、《C#中XML文件操做技巧彙總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數據結構與算法教程》、《C#數組操做技巧總結》及《C#面向對象程序設計入門教程

但願本文所述對你們C#程序設計有所幫助。

 

出處:https://www.jb51.net/article/117279.htm

=======================================================================================

=======================================================================================

=======================================================================================

 C#Winform鏈接Oracle數據庫 , 及角色講解

 

1、鏈接方法

(1)System.Data.OracleClient

  注意1:此方法在.NET 4.0以前(包括4.0)是能夠的,但在以後版本中就不能用了,官方已經聲明;

  注意2:此方法提供的接口權限不足,例如不能以sysdba身份創建鏈接,即不支持關鍵字「dba privilege」;

  注意3:若是安裝的Oracle客戶端是64位的,那麼VS2010在編譯時必須指定X64平臺,不然報錯

  注意4:使用此方法鏈接數據庫,須要安裝Oracle客戶端或者在服務端構造WebService接口供客戶端調用

(2)Oracle.DataAccess(\product\12.1.0\dbhome_1\ODP.NET\bin\4)

  這個是Oracle官方的鏈接接口(ODP.NET),能夠以sysdba身份創建鏈接,例如

  "Data Source=XXX;User ID=XXX;Password=XXX;DBA Privilege=SYSDBA";

  使用此方法,不須要額外安裝Oracle客戶端,只須要引用相應DLL便可

2、鏈接過程當中遇到的問題

system和sys帳戶登陸的時候有DBA模式和普通模式,若是是以DBA模式登陸,而後去建立表格,在查詢(鏈接字符串)中必定要

註明「DBA Privilege=SYSDBA」,不然報錯「ORA-00942: 表或視圖不存在」,謹記!

 

 出處:http://blog.sina.com.cn/s/blog_900ca29d0102vn3r.html

-----------------------------------------------------------------------------------------------------------------

oracle的sysdba權限問題

一、sysdba是一個身份,不是權限,被授予sysdba身份的用戶登陸時有兩種模式能夠選擇,一是普通模式,二是sysdba模式。以sysdba模式登陸時能夠關閉數據庫,普通模式則沒有權限。
確認你當前模式的方法是在命令行窗口執行show user,普通模式顯示zzy,sysdba模式顯示sys。

二、上面說到了,sysdba是一個身份,不是權限,因此user_sys_privs查不到。
正確的查詢方法是select * from v$pwfile_users;

 

出處:https://zhidao.baidu.com/question/418248527.html
---------------------------------------------------------------------------------------------------------

Oracle角色 

1、概述

角色就是相關權限的命令集合,使用角色的主要目的就是爲了簡化權限的管理。假定有用戶a,b,c爲了讓他們都擁有權限

一、鏈接數據庫

二、在scott.emp表上select,insert,update

若是採用直接受權操做,則須要進行12次受權。

若是採用角色就能夠簡化

首先將create session,select on scott.emp,insert on scott.emp,update on scott.emp授予角色,而後將該角色授予a,b,c用戶,這樣就能夠三次受權搞定。角色分爲預約義角色和自定義角色兩類。

 

2、預約義角色

預約義角色是指Oracle所提供的角色,每種角色都用於執行一些特定的管理任務,下面咱們介紹經常使用的預約義角色connect,resource,dba。

一、connect角色

connect角色具備通常應用開發人員須要的大部分權限,當創建了一個用戶後,多數狀況下,只要給用戶授予connect和resource角色就夠了,那麼connect角色具備如下系統權限:

alter session

create cluster

create database link

create session

create view

create sequence

 

二、resource角色

resource角色具備應用開發人員所須要的其餘權限,好比創建存儲過程、觸發器等。這裏須要注意的是resource角色隱含了unlimited tablespace系統權限。

resource角色包含如下系統權限:

create cluster

create indextype

create table

create sequence

create type

create procedure

create trigger

 

三、dba角色

dba角色具備全部的系統權限,及with admin option選項,默認的dba用戶爲sys和system他們能夠將任何系統權限授予其餘用戶。可是要注意的是dba角色不具有sysdba和sysoper的特權(啓動和關閉數據庫)。

 

3、自定義角色

顧名思義就是本身定義的角色,根據本身的須要來定義,通常是DBA來創建,若是用的別的用戶來創建,則須要具備create role的系統權限,在創建角色時能夠指定驗證方式(不驗證,數據庫驗證等)。

一、創建角色(不驗證)

若是角色是公用的角色,能夠採用不驗證的方式創建角色

sql>create role 角色名 not identified;

 

二、創建角色(數據庫驗證)

採用這樣的方式時,角色名、口令存放在數據庫中,當激活該角色時,必須提供口令。在創建這種角色時,須要爲其提供口令。

create role 角色名 identified by tiger;

 

三、角色受權

當創建角色時,角色沒有任何權限,爲了使得角色完成特定任務,必須爲其授予相應的系統權限和對象權限。

給角色受權

給角色授予權限和給用戶受權沒有太多的區別,可是要注意,系統權限的unlimited tablespace對對象權限with grant option選項是不能授予角色的。

sql>conn system/manager;

sql>grant create session to 角色名 with admin option;

sql>conn scott/tiger;

sql> grant select on scott.emp to 角色名;

sql>grant insert,update,delete on scott.emp to 角色名;

經過上面的步驟,就給角色受權了。

 

四、分配角色給某個用戶

通常分配角色是由dba來完成的,若是要以其餘用戶身份分配角色,則要求用戶必須具備grant any role的系統權限。

sql>grant 角色名 to blake with admin option;

由於我給了with admin option選項,因此,blake能夠把system分配給它的角色分配給別的用戶。

 

五、刪除角色

使用drop role,通常是dba來執行的,如用其餘用戶則要求該用戶具備drop any role系統權限。

sql>drop role 角色名;

 

六、顯示角色信息

(1)顯示全部角色

sql>select * from dba_roles;

 

(2)顯示角色具備的系統權限

sql>select privilege,admin_option from role_sys_privs where role='角色名';

 

(3)顯示角色具備的對象權限

經過查詢數據字典視圖dba_tab_privs能夠查看角色具備的對象權限或是列的權限。

 

(4)顯示用戶具備的角色及默認角色

當以用戶的身份鏈接到數據庫時,Oracle會自動的激活默認的角色,經過查詢數據字典視圖dba_role_privs能夠顯示某個用戶具備的全部角色及當前默認的橘色。

sql>select granted_role,default_role from dba_role_privs where grantee='用戶名';

 

出處:http://www.cnblogs.com/BeautyOfCode/archive/2010/09/28/1837239.html

彙總出處:https://www.cnblogs.com/zouhao/p/6164310.html

相關文章
相關標籤/搜索