C#中在.NET 7.0控制台应用使用ADO.NET的方法

目录

[一、新建.NET Framwork类、通过ADO.NET访问数据库并生成库](#一、新建.NET Framwork类、通过ADO.NET访问数据库并生成库)

1.操作流程

2.库源码

3.生成库

[二、再建 .NET 7.0控制台应用、依赖像引用库](#二、再建 .NET 7.0控制台应用、依赖像引用库)

[1. 操作流程](#1. 操作流程)

2.program.cs源码

3.在program.cs中查看类Class1定义


作者在上一篇文章中曾说过.NET 7.0框架下不支持ADO.NET的方法访问数据库,只有.NET Framwork框架下的应用才完美地支持ADO.NET的方法访问数据库。

事实上,.NET Framwork框架下使用ADO.NET的方法访问数据库,就是微软让用户使用ADO.NET的实体框架模型为媒介去访问数据库,通过ADO.NET建立实体数据模型,简单易用,极大简化了用户的编程操作。在.NET 7.0框架下微软没有提供这种类似的媒体通道,因此,用户也就不能像在.NET Framwork框架下那样,便捷地、快速地建立一个实体框架,然后籍此框架访问数据库。

.NET 7.0框架下虽然不提供直接的支持ADO.NET但不是说就一定不能使用ADO.NET,只要用户使用编程的手段,设计一个.NET Framwork框架下类似ADO.NET那样的功能的模型,在这个模型里通过ADO.NET建立对数据库的访问,然后生成.exe或.dll。再另外创建 .NET 7.0框架下应用,在应用的外部依赖里添加引用,指引到前面生成的.exe或.dll。就可以实现在 .NET 7.0框架下间接地通过ADO.NET建立对数据库的访问。

一、新建.NET Framwork类、通过ADO.NET访问数据库并生成库

1.操作流程

VS2022→ 新建C#类库(.NET Framwork),添加ADO.NET类,指引到数据库→ 编写对数据库操作的应用→生成.dll。

2.库源码

cs 复制代码
using System;
using System.Linq;

namespace ClassLibrary1
{
    public class Class1
    {
        public static string MyID, MyName, MySex, MyAge, MyTel, MyAddr, MyQQ, MyEmail;

        public void ReadFromSql(string _myID)
        {
            //读数据库
            //_myID = "YGBH0001";
            ReadFrdb(_myID);
        }

        #region 通过ADO.NET读数据库
        /// <summary>
        /// 读数据库tb_Employee
        /// </summary>
        static void ReadFrdb(string _myID)
        {
            using (db_CSharpEntities db = new db_CSharpEntities())
            {
                tb_Employee employee = db.tb_Employee.Where(W => W.ID == _myID).FirstOrDefault();
                {
                    MyID = employee.ID;
                    MyName= employee.Name;
                    MySex= employee.Sex;
                    MyAge = employee.Age.ToString();
                    MyTel = employee.Tel;
                    MyAddr = employee.Address;
                    MyQQ = employee.QQ.ToString();
                    MyEmail = employee.Email;
                };
                Console.WriteLine(MyID,MyName,MySex,MyAge,MyTel,MyAddr,MyQQ,MyAge);
            }
        }
        //char[] tb_Employee = new char[] { };
        #endregion 通过ADO.NET读数据库
    }
}

3.生成库

生成库 ClassLibrary1.dll

二、再建 .NET 7.0控制台应用、依赖像引用库

1. 操作流程

VS2022→再建 .NET 7.0控制台应用→右侧,资源管理器,项目,新建文件夹,起名为bin,→ bin的右键,添加,现有项,找到上面生成的库文件ClassLibrary1.dll,添加→项目,依赖项,添加项目引用,浏览,找到bin文件夹下的ClassLibrary1.dll,添加→编写应用,调用库文件→ 生成。

2.program.cs源码

cs 复制代码
// 在.NET7.0控制台应用里添加现有项Class1.cs,
// 在.NET7.0控制台应用依赖项里添加Class1.cs项目生成的dll库ClassLibrary1.dll
// 编写Program.cs应用
using System.Runtime.InteropServices;   // 用 DllImport 需用此 命名空间
using System.Reflection;                // 使用 Assembly 类需用此 命名空间
using System.Reflection.Emit;           // 使用 ILGenerator 需用此 命名空间
using ClassLibrary1;

namespace _10_6 
{ 
    class Program
    {
        private static void Main()
        {
            Class1 _Class = new();
            _Class.ReadFromSql("YGBH0002");         
        }
    }
}

3.在program.cs中查看类Class1定义

cs 复制代码
#region 程序集 ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// G:\C#_TM\chapter15\10_6\10_6\lib\ClassLibrary1.dll
// Decompiled with ICSharpCode.Decompiler 7.1.0.6543
#endregion

using System;
using System.Linq;

namespace ClassLibrary1
{
    public class Class1
    {
        public static string MyID;
        public static string MyName;
        public static string MySex;
        public static string MyAge;
        public static string MyTel;
        public static string MyAddr;
        public static string MyQQ;
        public static string MyEmail;
        public void ReadFromSql(string _myID)
        {
            _myID = "YGBH0001";
            ReadFrdb(_myID);
        }

        private static void ReadFrdb(string _myID)
        {
            using db_CSharpEntities db_CSharpEntities2 = new db_CSharpEntities();
            tb_Employee tb_Employee2 = db_CSharpEntities2.tb_Employee.Where((tb_Employee W) => W.ID == _myID).FirstOrDefault();
            MyID = tb_Employee2.ID;
            MyName = tb_Employee2.Name;
            MySex = tb_Employee2.Sex;
            MyAge = tb_Employee2.Age.ToString();
            MyTel = tb_Employee2.Tel;
            MyAddr = tb_Employee2.Address;
            MyQQ = tb_Employee2.QQ.ToString();
            MyEmail = tb_Employee2.Email;
            Console.WriteLine(MyID, MyName, MySex, MyAge, MyTel, MyAddr, MyQQ, MyAge);
        }
    }
}

由此,可以看出在 .NET 7.0框架下通过上述操作,果然间接地通过ADO.NET访问了数据库。虽然这种方法因个人设计的模型而不一定一次就成功,但是这种通过.NET Framework媒介一下的思想一定是成功的。遭遇调试错误,就修改自己的程序最后一定会成功。几个需要注意的地方:框架的版本和ADO.NET版本要匹配,框架的版本和依赖的EF程序包版本要匹配。

相关推荐
向宇it2 小时前
【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
开发语言·unity·c#·编辑器·游戏引擎
yngsqq3 小时前
一键打断线(根据相交点打断)——CAD c# 二次开发
windows·microsoft·c#
TENET信条3 小时前
day53 第十一章:图论part04
开发语言·c#·图论
anlog5 小时前
C#在自定义事件里传递数据
开发语言·c#·自定义事件
dingdingfish5 小时前
JSON 系列之1:将 JSON 数据存储在 Oracle 数据库中
oracle·json·database
向宇it6 小时前
【从零开始入门unity游戏开发之——unity篇01】unity6基础入门开篇——游戏引擎是什么、主流的游戏引擎、为什么选择Unity
开发语言·unity·c#·游戏引擎
仰望大佬0077 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
糖朝7 小时前
c#读取json
c#·json
dingdingfish10 小时前
JSON 系列之2:JSON简单查询
oracle·json·database·19c·23ai
向宇it12 小时前
【从零开始入门unity游戏开发之——C#篇26】C#面向对象动态多态——接口(Interface)、接口里氏替换原则、密封方法(`sealed` )
java·开发语言·unity·c#·游戏引擎·里氏替换原则