关于C#中Oracle的访问层的编写(使用日本Seasar后的启发)

接手的项目很多,其中和Oracle打交道的最多,其实不管是和Oracle打交道,还是其他数据库打交道,最麻烦的是在程序中要写很多SQL。

Seasar技术(类似于Spring技术,不过鄙人没用Spring技术开发过项目)一旦使用,就有点爱不释手了,因为它不需要再写那么多SQL,更不需要在程序中拼接那么多的SQL语句。它访问DB的操作是:

对于简单的操作(如插入数据,仅根据关键字获取一条数据,删除数据,更新数据),你根本不用写任何SQL,只要在定义好的JavaBean中(对,Seasar主要应用于Java,不过好像.Net也有应用) 定义一下使用到的Table,以及对应于每个字段的映射,seasar就会在执行的时候自动产生SQL;对于复杂的查询操作,可以定义SQL文件,只要把SQL文件的文件名和方法名对应好,seasar框架就可以自动的处理,做到SQL和程序的完全分离。

其实,仔细分析的话,发现seasar的思路并不复杂,但却让我们在开发的时候效率更高了。

这种做法可以在.net中很好的实现。

1)简单的操作(如插入数据,仅根据关键字获取一条数据,删除数据,更新数据),定义Dataset对象,可以自动产生标准的语句(只要在开发环境中从数据库中把库表拖到设计画面中)

2)复杂的操作,通过存储过程查询。

就这么简单。

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

C#调用存储过程的例子:

1)Winform

            OracleHelper db = new OracleHelper();
            ParameterCollection paramCol = new ParameterCollection();
            paramCol.NewCursor("patientlist");
            paramCol.NewInput("patientName", DbType.AnsiString,"huax");

            DataSet ds = db.QueryStored("query_p01_01", paramCol);
            this.dataGridView1.DataSource = ds.Tables[0];

2)OracleHelper

/*****
 * OracleHelper
 *
 * 2008.3.19
 * This class provide the method to query by stored procedure.
 *
 * ***/
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Oracle.DataAccess.Client;

namespace vip.da
{
    public class OracleHelper
    {
        private OracleConnection _con = null;

        /// <summary>
        /// auto open connection in create
        /// </summary>
        public OracleHelper()
        {
            string conStr = ConfigUtil.getOracleConnectionString();
            this._con = new OracleConnection(conStr);
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
需要.net4平台,引用之后,访问工具类示例: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Security.Cryptography; using System.IO; using Oracle.ManagedDataAccess.Client; namespace DBconnection { public class DBHelper { /// <summary> /// 读取数据库连接 /// </summary> public static readonly string OracleConnectionStr = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.9.211)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=HIS)));Persist Security Info=True;User ID=ZLHIS;Password=o15ntu;"; /// <summary> /// 集合查询:在此完成所有的集合类型查询 /// </summary> /// <param name="sqlQuery">查询语句</param> /// <returns>结果集合</returns> public static DataSet OracleFillTable(string sqlQuery) { using (OracleConnection con = new OracleConnection(OracleConnectionStr)) { //创建数据适配器,将查询语句及连接字符串两个参数传进数据适配器 con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandText = sqlQuery; //新建一个表格对象dt,用来获取查询的数据 DataSet ds = new DataSet(); try { //填充表格 OracleDataAdapter oda = new OracleDataAdapter(cmd); oda.Fill(ds); //如果查询无误,则返回查询出的数据 return ds; } catch { //执行查询出现错误,返回null值 return null; } finally { //主动销毁所用的资源 ds.Dispose(); cmd.Dispose(); // 关闭连接 con.Close(); } } } /// <summary> /// 集合查询:在此完成所有的集合类型查询 /// </summary> /// <param name="sqlQuery">查询语句</param> /// <returns>结果集合</returns> public static string OracleGetTable(string sqlQuery) { string result = null; try { using (OracleConnection con = new OracleConnection(OracleConnectionStr)) { OracleCommand cmd = con.CreateCommand(); try { con.Open(); cmd.CommandText = sqlQuery; try { //执行sql语句 result = cmd.ExecuteScalar().ToString(); } catch { result = "-1"; } } catch (Exception e) { throw new Exception("数据库连接出现错误!"); } finally { //主动销毁资源 cmd.Dispose(); // 关闭连接 con.Close(); } } } catch (Exception e) { // MessageBox.Show(e.ToString()); } return result; } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值