.NET连接、操作oracle数据库_.net 连接oracle数据库-程序员宅基地

技术标签: oracle  .net  

.net连接oracle有三种方式,我采用的是使用微软自带的system.data.oracleclient

电脑上装了oracle11g client(x64)、和pl/sql,在安装的过程中也遇到了许多问题:

1、oracle安装,环境不满足最低要求

百度然后修改了两个.ora文件就好了,加上了win8的坏境

2、oracle安装,path过长无法自动配置环境变量

于是在path中删掉了一些没用的东西(比如已经卸载的软件的配置)

然后重启电脑!!!就好了,一定要重启!!! 

3、pl/sql一直无法登陆

发现pl/sql装的是32位的,但是也有说不一定要统一,但我确实遇到了这个问题(大概是我菜)

 

然后就是开始连接数据库啦!

1、在引用中添加system.data.oracleclient;(直接右键添加引用就可以找到)

2、写上using System.Data.OracleClient;

public void ConnectDB()
        {
            OracleConnection conn = new OracleConnection("data source=**服务命名**;User Id=**用户名**;Password=**密码**;");
            try
            {
                conn.Open();
                string sql = "select * from atest_patient_info";
                OracleDataAdapter res = new OracleDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                res.Fill(dt);
                string a = null;
                for (int x = 0; x < dt.Rows.Count; x++)
                {
                    a += dt.Rows[x][1].ToString();
                    a += "\n";
                }
                MessageBox.Show(a);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                conn.Close();
            }
        }

然后是用于查找和删、改、增的函数(删、改、查用的是同一个函数)

private OracleConnection conn = new OracleConnection("data source=**服务命名**;User Id=**用户名**;Password=**密码**;"); 
public DataTable getPatientInfo(string sql)//查找
        {
            DataTable table = new DataTable();
            try
            {
                conn.Open();
                OracleDataAdapter res = new OracleDataAdapter(sql, conn);
                res.Fill(table);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            finally
            {
                conn.Close();
            }
            return table;
        }

        public bool updataTables(string sql1, string sql2)//增、改、删
        {
            try
            {
                conn.Open();
                OracleCommand cmd1 = conn.CreateCommand();
                cmd1.CommandText = sql1;
                cmd1.ExecuteNonQuery();
                OracleCommand cmd2 = conn.CreateCommand();
                cmd2.CommandText = sql2;
                cmd2.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return false;
            }
            finally
            {
                conn.Close();
            }
            return true;
        }

然后是调用函数的地方啦!

1、增加

        public void NewPatient()
        {
            string[] a = { IDText.Text, NameText.Text, SexBox.Text, AgeText.Text, NativeText.Text, ComplainsText.Text,
            PreComplaintText.Text, PreIllnessText.Text, PersonalHisText.Text, AdmittedTimeText.Text,RecordTimeText.Text};
            string sql1 = string.Format("insert into atest_patient_info values('{0}','{1}','{2}','{3}','{4}')",
                            a[0], a[1], a[2], a[3], a[4]);
            string sql2 = string.Format("insert into atest_admission_rec values('{0}','{1}','{2}','{3}','{4}','{5}','{6}')",
                                        a[0], a[5], a[6], a[7], a[8], a[9], a[10]);
            bool check = db.updataTables(sql1, sql2);
            if(check) treeView1.Nodes.Add(IDText.Text, NameText.Text);
        }

2、更新数据

public void RefreshPatient()
        {
            string[] a = { IDText.Text, NameText.Text, SexBox.Text, AgeText.Text, NativeText.Text, ComplainsText.Text,
            PreComplaintText.Text, PreIllnessText.Text, PersonalHisText.Text, AdmittedTimeText.Text,RecordTimeText.Text};
            string sql1 = string.Format("update atest_patient_info set name='{0}',sex='{1}',age='{2}',native='{3}' where pid='{4}'",
                            a[1],a[2],a[3],a[4],a[0]);
            string sql2 = string.Format("update atest_admission_rec set complains='{0}',present='{1}',previous='{2}',personal='{3}'," +
                "intime='{4}',rectime='{5}' where pid='{6}'",a[5],a[6],a[7],a[8],a[9],a[10],a[0]);
            bool check = db.updataTables(sql1, sql2);
        }

3、删除数据

        public void DeletePatient()
        {
            //delete data from database    
            //**admission_rec has a foreign key references patient_info**
            //1、delete data from table admission_rec 
            //2、delete data from table patient_info
            string pid = IDText.Text;
            string sql1 = string.Format("delete from atest_admission_rec where pid='{0}'", pid);
            string sql2 = string.Format("delete from atest_patient_info where pid='{0}'", pid);
            bool check = db.updataTables(sql1, sql2);
            
            //delete from tree
            //if the sql is completed
            if(check) treeView1.SelectedNode.Remove();
        }

4、查找数据(返回数据存在datatable中)

public void SetBoxValue()
        {
            string sql = "select a.pid,a.name,a.sex,a.age,a.native,b.intime,b.rectime,b.complains,b.present,b.previous,b.personal from atest_patient_info a,atest_admission_rec b where a.pid=b.pid and a.pid='"+treeView1.SelectedNode.Name+"'";
            DataTable tb = db.getPatientInfo(sql);
            IDText.Text = tb.Rows[0][0].ToString();
            NameText.Text = tb.Rows[0][1].ToString();
            SexBox.Text = tb.Rows[0][2].ToString();
            AgeText.Text = tb.Rows[0][3].ToString();
            NativeText.Text = tb.Rows[0][4].ToString();
            AdmittedTimeText.Text = tb.Rows[0][5].ToString();
            RecordTimeText.Text = tb.Rows[0][6].ToString();
            ComplainsText.Text = tb.Rows[0][7].ToString();
            PreComplaintText.Text = tb.Rows[0][8].ToString();
            PreIllnessText.Text = tb.Rows[0][9].ToString();
            PersonalHisText.Text = tb.Rows[0][10].ToString();
        }

最后,感谢大神们!

参考链接:

    连接oracle数据库:https://www.cnblogs.com/mq0036/p/3678148.html
    读取数据:https://www.cnblogs.com/jiangxin/p/5546288.html
    增删改:https://blog.csdn.net/wulex/article/details/81007248

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yyyyz999/article/details/85003472

智能推荐

2020-2021 ICPC Southeastern European Regional Programming Contest_给定序列 { } {a n },定义区间 ( [ , ] ) f([l,r]) -程序员宅基地

Reverse Game 博弈、思维大意:给定一个01字符串S,两人轮流操作,每次可以选择“10”、“110”、“100”、“1010”进行翻转。不能操作的判输。问谁会获胜?思路:题目给的东西都不是随便给的,观察上面给出的几个字符串我们就会发现,最终不能继续进行操作的时候一定是前半部分全部是0后半部分全部是1。因为一旦1后面有0,那么必然可以翻转将0往前面翻,直到翻到前面不再有1为止。每次只翻转10的次数是把每个1后面0的个数加起来。然后我们观察发现,每次翻转,最少少1个、最多少2个“10”。“10._给定序列 { } {a n },定义区间 ( [ , ] ) f([l,r]) 的

STM32C语言指针_stm32 指针-程序员宅基地

STM32C语言指针_stm32 指针

使用HttpClient发送http请求,并解析从服务器端返回的数据_client 返回数据中包含http地址-程序员宅基地

使用Apache的httpclient包可以模拟HTTP请求的发送, get和post均可以。最方便的地方就是请求struts等web框架进行测试,省去了做测试页面的差事。[java] view plaincopyprint?import java.io.IOException; import java.io.InputStream; i_client 返回数据中包含http地址

Linux高可用集群方案之配置heartbeat v2基于crm+hb_gui接口,配置ipvs高可用集群-程序员宅基地

本章主要配置heartbeat v2基于crm+hb_gui接口,配置高可用+ipvs负载均衡集群。如何安装heartbeat v2、httpd、nfs、配置心跳连接、ssh密钥通信、同步时间、添加名称解析、配置yum源等请参照:>>Linux高可用集群方案之配置heartbeat v2基于haresources配置文件的httpd高可用集群http://ccs...

HttpServletRequest对象(一)- 获取客户机信息-程序员宅基地

一、HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。 二、Request常用方法 2.1、获..._httpservletrequest 获取用户信息

小米平板4 android版本,小米平板4/4Plus通刷-LOS-安卓9.0.0-稳定版Stable2.0-来去电归属-农历等-本地化增强适配...-程序员宅基地

制作者:MOS-Developer基于版本:LineageOS Android最新安卓9.0.0代码适合机型:小米平板4/4Plus/clover\部分代码感谢guaiyihu注意事项:为了能一直更新和维护,不付费不收费,请把预装的4个软件使用3-5天后再卸载!!欢迎捐赠,目前手头也个好的东西可以带大家挣钱,就看看大家感兴趣或者想不想动动手了,也可以联系我。刷机注意事项以及教程:https://p..._小米平板4刷机包

随便推点

纯CSS实现九宫格-程序员宅基地

纯css实现九宫格其实实现九宫格的主要难点在于: * 边框的处理方式 * 悬浮单元格重新展现边框的效果第一步让边框重叠我们可以知道九宫格的每一条边框的粗细多是一样的,这里大家要先了解box-sizing中的两种盒子模型,border-box和content-box: * border-box: width = border + padding + contentWidth

java中for与foreach_Java中for与foreach的区别_KyrieXu11的博客-程序员宅基地

for与foreach在我们平时的编码中使用频率很高,但是他们的区别你真的了解吗?上干货!!!foreach的书写格式:for(元素类型 元素名称 : 遍历数组(集合)(或者能进行迭代的)){语句}for的书写格式:for(初始化; 布尔表达式; 更新) {语句}foreach虽然是for循环的简化版本,但是并不是说foreach就比for更好用,foreach适用于循环次数未知,或者计算循环次数..._java foreach()和for(元素类型 元素名称 : 遍历数组(集合)是两种写法吗

判别两棵树是否相等 设计算法_双圆弧插值算法(二)-程序员宅基地

双圆弧插值算法(二)找到中心 找到连接点后,就可以求解圆心。我们定义一个向量,n1,垂直于t1。这最终是一个与(c1−p1)平行的标准化向量。从p1到c1的方向。综合起来,我们得到了c1的解。 通过检查上述方程中的分母,我们可以看出,如果p1到pm的向量与t1共线,它将为零。圆的中心基本上被推到无穷远,这给我们留下了p1和pm之间的一条直线,而不是一条弧。 对c2使用相同的方法得出:选择方向 现在..._双圆弧插值算法(二)

使用xmanager访问linux图形界面-程序员宅基地

使用xmanager访问linux图形界面1. 修改/etc/inittab,改变runlevel为5,例如[root@QRedHat etc]# cat /etc/inittab......id:5:initdefault:....

使用Mybatis查询,返回类型为int,查询结果为空时报错-程序员宅基地

错误代码:解决办法:使用MySQL的IFNULL函数和MAX函数,将返回的NULL值转换为0。

Pinyin4j实现中文转拼音的功能-程序员宅基地

需要的jar包,PinYin4j.jar解析工具类public class PinYinUtil { /** * 获取汉字串拼音首字母,英文字符不变 * @param chinese 汉字串 * @return 汉语拼音首字母 */ public static String getFirstSpell(String chin...