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


    目录

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

    1.操作流程        

    2.库源码

    3.生成库

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

    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.库源码

    1. using System;
    2. using System.Linq;
    3. namespace ClassLibrary1
    4. {
    5. public class Class1
    6. {
    7. public static string MyID, MyName, MySex, MyAge, MyTel, MyAddr, MyQQ, MyEmail;
    8. public void ReadFromSql(string _myID)
    9. {
    10. //读数据库
    11. //_myID = "YGBH0001";
    12. ReadFrdb(_myID);
    13. }
    14. #region 通过ADO.NET读数据库
    15. ///
    16. /// 读数据库tb_Employee
    17. ///
    18. static void ReadFrdb(string _myID)
    19. {
    20. using (db_CSharpEntities db = new db_CSharpEntities())
    21. {
    22. tb_Employee employee = db.tb_Employee.Where(W => W.ID == _myID).FirstOrDefault();
    23. {
    24. MyID = employee.ID;
    25. MyName= employee.Name;
    26. MySex= employee.Sex;
    27. MyAge = employee.Age.ToString();
    28. MyTel = employee.Tel;
    29. MyAddr = employee.Address;
    30. MyQQ = employee.QQ.ToString();
    31. MyEmail = employee.Email;
    32. };
    33. Console.WriteLine(MyID,MyName,MySex,MyAge,MyTel,MyAddr,MyQQ,MyAge);
    34. }
    35. }
    36. //char[] tb_Employee = new char[] { };
    37. #endregion 通过ADO.NET读数据库
    38. }
    39. }

    3.生成库

            生成库 ClassLibrary1.dll

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

    1. 操作流程

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

    2.program.cs源码

    1. // 在.NET7.0控制台应用里添加现有项Class1.cs,
    2. // 在.NET7.0控制台应用依赖项里添加Class1.cs项目生成的dll库ClassLibrary1.dll
    3. // 编写Program.cs应用
    4. using System.Runtime.InteropServices; // 用 DllImport 需用此 命名空间
    5. using System.Reflection; // 使用 Assembly 类需用此 命名空间
    6. using System.Reflection.Emit; // 使用 ILGenerator 需用此 命名空间
    7. using ClassLibrary1;
    8. namespace _10_6
    9. {
    10. class Program
    11. {
    12. private static void Main()
    13. {
    14. Class1 _Class = new();
    15. _Class.ReadFromSql("YGBH0002");
    16. }
    17. }
    18. }

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

    1. #region 程序集 ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    2. // G:\C#_TM\chapter15\10_6\10_6\lib\ClassLibrary1.dll
    3. // Decompiled with ICSharpCode.Decompiler 7.1.0.6543
    4. #endregion
    5. using System;
    6. using System.Linq;
    7. namespace ClassLibrary1
    8. {
    9. public class Class1
    10. {
    11. public static string MyID;
    12. public static string MyName;
    13. public static string MySex;
    14. public static string MyAge;
    15. public static string MyTel;
    16. public static string MyAddr;
    17. public static string MyQQ;
    18. public static string MyEmail;
    19. public void ReadFromSql(string _myID)
    20. {
    21. _myID = "YGBH0001";
    22. ReadFrdb(_myID);
    23. }
    24. private static void ReadFrdb(string _myID)
    25. {
    26. using db_CSharpEntities db_CSharpEntities2 = new db_CSharpEntities();
    27. tb_Employee tb_Employee2 = db_CSharpEntities2.tb_Employee.Where((tb_Employee W) => W.ID == _myID).FirstOrDefault();
    28. MyID = tb_Employee2.ID;
    29. MyName = tb_Employee2.Name;
    30. MySex = tb_Employee2.Sex;
    31. MyAge = tb_Employee2.Age.ToString();
    32. MyTel = tb_Employee2.Tel;
    33. MyAddr = tb_Employee2.Address;
    34. MyQQ = tb_Employee2.QQ.ToString();
    35. MyEmail = tb_Employee2.Email;
    36. Console.WriteLine(MyID, MyName, MySex, MyAge, MyTel, MyAddr, MyQQ, MyAge);
    37. }
    38. }
    39. }

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

  • 相关阅读:
    Redis的数据删除策略
    【视觉SLAM入门】9.1 建图1---SLAM任务,稠密地图构建,立体视觉,RGBD,八叉树,点云地图等各种不同地图
    leetcode二叉树相关模板
    Ubuntu中安装使用QEMU/KVM/virt-manager运行虚拟机
    C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品
    创建阿里云的免费镜像仓库
    蓝牙耳机什么牌子音质最好?音质超好的蓝牙耳机推荐
    JavaScript小技能:原型链的运作机制、Promise链
    什么是电子设备的老化测试?
    医院微信预约挂号小程序开发_分享医院做预约挂号小程序的可以实现什么功能
  • 原文地址:https://blog.csdn.net/wenchm/article/details/134334625