C#Oracle全教程

本文详细介绍了如何在.NET中通过Oracle.ManagedDataAccess连接Oracle数据库,包括配置listener.ora和tnsnames.ora以实现远程访问,以及提供示例代码展示如何执行SQL查询和非查询操作。
摘要由CSDN通过智能技术生成
Oracle

第一范式:就是数据库每个单元格,拆分为最小单位,不能再拆分了

表(table)=实体(entity)=关系(relation)

行(row)=记录(record)

行(column)=属性(attribute)

ORACLE服务器=ORACLE系统=ORACLE数据库管理系统

oracle

这里要注意的是:连接到服务端上的Oracle数据库时,需要把配置文件修改了,使其能够进行局域网或者远程的访问,还要把端口开放。

在Oracle数据库安装路径,当然每台安装oracle数据库的地址都是不同的(例如:C:\Oracle11g\product\11.2.0\dbhome_1\network\admin\listener.ora tnsnames.ora)中找到文件listener.ora和tnsnames.ora文件,把两个文件中HOST = localhost配置改成HOST=192.186.11.1(服务器IP地址)重新启动服务。

连接oracle

1.在工具-nuget包管理器-下载安装Oracle.ManagedDataAccess到解决资源项目

命名空间:using Oracle.ManagedDataAccess.Client;

连接语句:

 //设置数据库连接语句 用户、密码、ora实例名
            string connString = "User ID=admin;Password=admin123;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORACLEDATA)))";
            OracleConnection conn = new OracleConnection(connString);
            try
            {
                conn.Open();
                Console.WriteLine("连接成功!" + conn.State.ToString());
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("连接失败!" + ex.Message.ToString());
                Console.ReadLine();
            }
            finally
            {
                conn.Close();
                Console.ReadLine();
            }

2.改善上面的代码语句:

编写一个OracleHelper类

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
​
namespace winformTestOracleconnect06
{
    internal class OracleHelper
    {
​
        static string connString = "User ID=admin;Password=admin123;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 10.127.100.189)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORACLEDATA)))";
        public static int ExecuteNonQuery(string sql, params OracleParameter[] parameters)
        {
            using (OracleConnection conn = new OracleConnection(connString))
            {
                conn.Open();
                using (OracleCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);
                    int i = cmd.ExecuteNonQuery();
                    conn.Close();
                    return i;
                }
            }
        }
        public static DataTable ExecuteDataTable(string sql, params OracleParameter[] parameters)
        {
            using (OracleConnection conn = new OracleConnection(connString))
            {
                conn.Open();
                using (OracleCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    cmd.Parameters.AddRange(parameters);
                    OracleDataAdapter adapter = new OracleDataAdapter(cmd);
                    DataTable datatable = new DataTable();
                    adapter.Fill(datatable);
                    conn.Close();
                    return datatable;
                }
            }
        }
    }
}
​

3:在类中使用

如查询:

string sSql;
            DataTable dt = new DataTable();
            // sql 语句
            sSql = " select * from Table1";
            // sql 赋值 无参数传入 sql
            OracleParameter[] paramATIO = new OracleParameter[] { };
            // sql 语句
            // sSql = " select * from students where name = :name and age = :age";
            // string name = "张三";
            // int age = 16;
            // 有参数传入 sql
            // OracleParameter[] paramATIO = new OracleParameter[] { 
            //                    new OracleParameter(":name",name ),
            //                    new OracleParameter(":age",age + "")
            //                };
            // 执行sql
            dt = OracleHelper.ExecuteDataTable(sSql, paramATIO);
            if (dt.Rows.Count > 0)
            {
                dataGridView1.DataSource = dt;
                /*Console.WriteLine("该 sql 执行结果共计" + dt.Rows.Count + " 行");
                Console.WriteLine("数据" + dt.Rows[0][1]);
                Console.ReadKey();*/
                //0
                #region 输出
                /* for (var i = 0; i < dt.Rows.Count; i++)
                 {
                     var row = dt.Rows[i];
                     var str = "";
                     //0,1
                     for (var j = 0; j < row.ItemArray.Length; j++)
                     {
                         str += row[j] + " ";
                     }
                     Console.WriteLine("row:" + i + " " + str);
                     Console.ReadKey();
                 }*/
                #endregion
            }

非查询语句:如添加

if (textBox1.Text.Trim() != string.Empty && textBox2.Text.Trim() != string.Empty) 
            {
                string sSql = "INSERT INTO TABLE1 (\"user\",\"password\")VALUES('" + textBox1.Text + "','" + textBox2.Text + "')";
                int i = OracleHelper.ExecuteNonQuery(sSql);
                if (i > 0)
                {
                    MessageBox.Show("添加成功", "添加", MessageBoxButtons.OK, MessageBoxIcon.Question);
                }
                else
                {
                    MessageBox.Show("添加失败", "添加", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("添加失败", "添加", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            this.Close();
        }
using语句的使用
using (SqlConnection con = new SqlConnection(strCon))
            {
                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter("SELECT No AS 员工编号, Name AS 员工姓名," +
                    " Salary AS 基本工资, Evaluation AS 工作评价 FROM tb_Personnel ORDER by No", con);
                da.Fill(dt);
                this.dgvStaffInfo.DataSource = dt.DefaultView;
            }
​

它的作用是当使用SqlConnection类的实例时无论什么原因,离开这个代码段就自动调用SqlConnection类的Dispose。使用try……catch也能达到同样的目的,但是using更为方便一点。

也可以这样理解:using(SqlConnection con = new SqlConnection(strCon))这句代码的意思是控制对于数据库的关闭和释放

如果是其他的内容也是同理。

using()这一句执行完毕后,通过数据适配器SqlDataAdapter da = new SqlDataAdapter(“SELECT No AS 员工编号, Name AS 员工姓名,” +" Salary AS 基本工资, Evaluation AS 工作评价 FROM tb_Personnel ORDER by No", con)中的con对数据库进行连接上,

在接下来的代码段中可直接对数据库中的数据进行相关的操作。

在这段代码段中,如果某一句发生异常,using的作用就会使程序的执行直接跳过这段,并且关闭using()括号中的实例。

在本代码中,如果using下的代码段产生错误,直接结束整段using下的代码,并且关闭数据库并释放资源。类似于try……catch,但是更为高级。因为在try……catch中如果产生某句代码产生异常,会在该句产生一个断点,中断于此并抛出异常。而且如果要释放资源,需要在catch中声明和定义。但是using会自动的释放掉这些占用的资源。

DOM进入Oracle数据库

我们可以使用“sqlplus”命令进入Oracle数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值