• 关注官方微信 微信公众号 添加方式:
    1:搜索微信号(gogolinux
    2:扫描左侧二维码
  • 登录 注册
  • 一起学LINUX - GOGOLINUX

    查看: 1279|回复: 19
    打印 上一主题 下一主题

    在.NET开发面向Oraclebte365在线直播_bte365是真的吗_bte365靠谱吗的应用程序

    [复制链接]

    53

    主题

    53

    帖子

    38

    积分

    新手上路

    Rank: 1

    积分
    38
    跳转到指定楼层
    楼主
    发表于 2019-1-25 14:01:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    其实这个不是一个什么新的话题。但是之前在多次项目中,总是遇到大家针对Oraclebte365在线直播_bte365是真的吗_bte365靠谱吗的访问时,会有各种各样的问题,最基本的就是要在客户端安装各种client,版本不一样的话还有各种问题。
    静下心来看看,其实也没有那么难。我这里总结一下,如何在.NET应用程序中,简单优雅地使用Oraclebte365在线直播_bte365是真的吗_bte365靠谱吗。
    第一个原则:不要依赖

    最好的情况就是,程序自己就可以完成数据访问,不需要额外地安装所谓的Oracle Client,那是一个很麻烦而且痛苦的事情。
    我们首先看看,如果不装任何东西,是否可以实现Oraclebte365在线直播_bte365是真的吗_bte365靠谱吗访问?
    其实,.NET本身是自带了针对Oraclebte365在线直播_bte365是真的吗_bte365靠谱吗访问的组件的,就是下面这个System.Data.OracleClient

    我们的代码如下(这是最原始的ADO.NET代码,只是做演示)
    using System;
    using System.Data.OracleClient;

    namespace ConsoleApplication
    {
    ??? class Program
    ??? {
    ??????? static void Main(string[] args)
    ??????? {
    ??????????? var connectionString = "user id=system;password=password;data source=192.168.56.101:1521/orcl";

    ??????????? using (var connection = new OracleConnection(connectionString))
    ??????????? {
    ??????????????? var cmd = connection.CreateCommand();
    ??????????????? cmd.CommandText = "select * from sys.dba_all_tables";
    ??????????????? connection.Open();
    ??????????????? var reader = cmd.ExecuteReader();
    ??????????????? while (reader.Read())
    ??????????????? {
    ??????????????????? Console.WriteLine(reader.GetString(0));

    ??????????????? }
    ??????????????? reader.Close();
    ??????????????? connection.Close();

    ??????????? }
    ????????????
    ??????? }
    ??? }
    }

    ?看起来应该是没有问题的,运行起来却会报错
    Additional information: System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.

    这里的提示就是说,需要有Oracle Client。
    这不是我们希望看到的结果。实际上原理上说,我们这么理解吧,可能是这个组件只是一个wrapper,它实际去操作bte365在线直播_bte365是真的吗_bte365靠谱吗,还需要通过Oracle Client才能实现。
    ?使用Oracle提供的组件
    更好的建议就是,使用Oracle 官方提供的托管代码组件。Oracle.ManagedDataAccess.dll


    只要添加了这个Nuget Package,代码几乎不需要任何改动,直接就可以复用。
    using System;
    using Oracle.ManagedDataAccess.Client;

    namespace ConsoleApplication
    {
    ??? class Program
    ??? {
    ??????? static void Main(string[] args)
    ??????? {
    ??????????? var connectionString = "user id=system;password=password;data source=192.168.56.101:1521/orcl";

    ??????????? using (var connection = new OracleConnection(connectionString))
    ??????????? {
    ??????????????? var cmd = connection.CreateCommand();
    ??????????????? cmd.CommandText = "select * from sys.dba_all_tables";
    ??????????????? connection.Open();
    ??????????????? var reader = cmd.ExecuteReader();
    ??????????????? while (reader.Read())
    ??????????????? {
    ??????????????????? Console.WriteLine(reader.GetString(0));

    ??????????????? }
    ??????????????? reader.Close();
    ??????????????? connection.Close();

    ??????????? }
    ????????????
    ??????? }
    ??? }
    }

    ?
    当然比较理想的情况是将连接字符串之类的,可以放在配置文件中去。这个很简单,这里就不说明了。?
    结合Entity Framework使用

    Entity Framework 出来已经好多年了,几乎成了所有.NET应用程序中的标配(不管有没有用到)。现在的最新版本应该是 6.1.3 .同时,需要注意的是,以后会有一个所谓的Entity Framework Core ,而且开源了http://github.com/aspnet/EntityFramework
    回到正题,之前的代码写法其实还是比较原始的,那么如何结合Entity Framework进行Oraclebte365在线直播_bte365是真的吗_bte365靠谱吗方面的编程呢?
    首先,安装下面的这个组件:Oracle.ManagedDataAccess.EntityFramework

    然后,可以使用Code first的方式编写如下代码
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity;

    namespace ConsoleApplication
    {
    ??? public class OracleContext : DbContext
    ??? {
    ??????? public OracleContext() : base("OracleDbContext")
    ??????? {

    ??????? }
    ??????? public DbSet Employees { get; set; }
    ??? }
    ??? [Table("EMPLOYEES", Schema = "SYSTEM")]
    ??? public class Employee
    ??? {
    ??????? [Key()]
    ??????? [Column("EMPLOYEEID")]
    ??????? public int EmployeeID { get; set; }

    ??????? [Column("FIRSTNAME")]
    ??????? public string FirstName { get; set; }
    ??????? [Column("LASTNAME")]
    ??????? public string LastName { get; set; }
    ??? }
    }

    ?这里的代码没有什么出奇的。配置文件需要有如下的设置(一般在添加Oracle.ManagedDataAccess.EntityFramework 这个组件的时候,会自动修改配置文件)


    ?
    ???
    ???
    ???
    ?
    ?
    ???
    ?
    ?
    ???
    ?????
    ???????
    ????????????
    ???
    ?
    ??
    ???
    ?
    ?
    ???
    ?????
    ?????
    ???
    ?
    ?
    ???
    ?????
    ???????
    ???????
    ???????
    ?????
    ???
    ?
    ?
    ???
    ?????
    ???????
    ?????
    ???
    ???
    ?????
    ?????
    ???
    ?

    后台bte365在线直播_bte365是真的吗_bte365靠谱吗的表格设计也是很简单。

    需要注意的是,经过实验,我发现目前这个Entity Framework要求所操作的表必须要有主键,而且主键必须是一个identity column(即自己绑定一个序列,实现自动增长),否则会报错
    实际上后台会通过一个触发器来实现这个功能
    create or replace TRIGGER EMPLOYEES_TRG?
    BEFORE INSERT ON EMPLOYEES?
    FOR EACH ROW?
    BEGIN
    ?
    ? BEGIN
    ??? IF INSERTING AND :NEW.EMPLOYEEID IS NULL THEN
    ????? SELECT EMPLOYEES_SEQ.NEXTVAL INTO :NEW.EMPLOYEEID FROM SYS.DUAL;
    ??? END IF;
    ? END COLUMN_SEQUENCES;
    END;

    ?
    接下来在前端程序中就简单多了,下面是一个代码片段
    var ctx = new OracleContext();
    ctx.Employees.Add(new Employee() {FirstName = "ares", LastName = "chen" });
    ctx.SaveChanges();

    var query = ctx.Employees.ToArray();
    foreach (var item in query)
    {
    ??? Console.WriteLine(item);
    }

    ?需要注意的是,如果需要使用Entity Frmaework的Database first或Model first的功能,还是需要安装Oracle Client,或者准确地说应该是ODAC组件
    http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html
    原文地址:http://www.cnblogs.com/chenxizhang/p/5415442.html

    .NET社区新闻,深度好文,微信中搜索
    dotNET跨平台
    或扫描二维码关注

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    分享到:

    4

    主题

    95

    帖子

    212

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    212
    沙发
    发表于 2019-2-6 16:08:45 | 只看该作者

    0

    主题

    23

    帖子

    62

    积分

    注册会员

    Rank: 2

    积分
    62
    板凳
    发表于 2019-2-10 16:10:39 | 只看该作者
    不错不错,很好很好,谢谢分享












    出售中的域名:【0085.red】??【0085.kim】??【0085.mobi】 【56ao.com】??【wazou.net】

    0

    主题

    586

    帖子

    1292

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1292
    地板
    发表于 2019-4-5 02:04:25 | 只看该作者

    0

    主题

    478

    帖子

    1062

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1062
    5#
    发表于 2019-4-14 11:07:05 | 只看该作者

    0

    主题

    586

    帖子

    1292

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1292
    6#
    发表于 2019-4-14 17:37:01 | 只看该作者

    0

    主题

    586

    帖子

    1292

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1292
    7#
    发表于 2019-4-14 19:58:11 | 只看该作者

    0

    主题

    586

    帖子

    1292

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1292
    8#
    发表于 2019-4-14 20:41:30 | 只看该作者

    0

    主题

    586

    帖子

    1292

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1292
    9#
    发表于 2019-4-17 07:33:07 | 只看该作者

    0

    主题

    460

    帖子

    1147

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1147
    10#
    发表于 2019-4-17 10:29:26 | 只看该作者
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    官方微博:

    官方头条号:

    官方微信

    手机访问:

    官方微信

    QQArchiver 手机版 小黑屋 一起学LINUX - GOGOLINUX 闽ICP备18025837号-1 Discuz! X3.4 Powered by ? 2001-2013 Comsenz Inc. 

    外围365官方网站本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!

    快速回复 快速发帖 返回顶部 返回列表