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

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

// 在.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定义

#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
#endregionusing 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程序包版本要匹配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWS云服务器EC2实例进行操作系统迁移

AWS云服务器EC2实例进行操作系统迁移 文章目录 AWS云服务器EC2实例进行操作系统迁移1. 亚马逊EC2云服务器简介1.2 亚马逊EC2云务器与弹性云服务器区别 2. 亚马逊EC2云服务器配置流程2.1 亚马逊EC2云服务器实例配置2.1.1 EC2实例购买教程2.1.1 EC2实例初始化配置2.1.2 远程登录E…

Python基础入门例程51-NP51 列表的最大与最小(循环语句)

最近的博文&#xff1a; Python基础入门例程50-NP50 程序员节&#xff08;循环语句&#xff09;-CSDN博客 Python基础入门例程49-NP49 字符列表的长度-CSDN博客 Python基础入门例程48-NP48 验证登录名与密码&#xff08;条件语句&#xff09;-CSDN博客 目录 最近的博文&…

Postman —— post请求数据类型

1、Postman中post的数据类型 post中有以下数据类型 1、form-data 2、x-www-form-urlencoded 3、raw 4、binary 2、Postman请求不同的post数据类型 from-data multipart/form-data&#xff0c;它将表单的数据组织成Key-Value形式&#xff0c;也可以上传文件&#xff0c;当…

Python基础入门例程52-NP52 累加数与平均值(循环语句)

最近的博文&#xff1a; Python基础入门例程51-NP51 列表的最大与最小(循环语句)-CSDN博客 Python基础入门例程50-NP50 程序员节&#xff08;循环语句&#xff09;-CSDN博客 Python基础入门例程49-NP49 字符列表的长度-CSDN博客 目录 最近的博文&#xff1a; 描述 输入描…

03函数参数

函数参数 有参 形参实参 无参 形参 就是形式参数&#xff0c;在def关键字定义函数名的括号里面的变量叫做形式参数&#xff0c;形参没有实际意义&#xff0c;被赋值后才有意义 实参 就是实际参数&#xff0c;在调用函数时提供得知或者变量成为实际参数 实参就是实际意义上的…

【计算机网络基础实验】实验二 有线IP互通网络实践

任务一 IP路由协议实现企业路由器通信 目录如下&#xff1a; 任务一 IP路由协议实现企业路由器通信2.1.1 任务描述2.1.2 任务目的2.1.3 任务实施实验需求实验步骤步骤1&#xff1a;更改每台设备的名称步骤2&#xff1a; 给R1接口配置相应IP地址步骤3&#xff1a; 给R2接口配置相…

华为ensp:rip宣告

ip全部配置好 R1 进入r1视图模式 rip network 192.168.1.0 network 1.0.0.0 R2 进入r2视图模式 rip network 192.168.2.0 network 1.0.0.0 这样就完成了宣告 display ip routing-table 查看路由表

异或运算

文章目录 异或运算的概念异或运算的性质交换两个变量的值&#xff08;不使用额外变量&#xff09;只出现一次的数字只出现一次的数字 III只出现一次的数字 II 异或运算的概念 对应二进制位进行异或运算对应二进制位上&#xff0c;相同结果为0&#xff0c;不同结果为1 小技巧&…

小程序分享当前页面

小程序分享页面的时候&#xff0c;大部分的资料都是显示的是onShareAppMessage 这个方法 /*** 用户点击右上角分享*/onShareAppMessage(res) {return {title: 您的好友向您分享了一本通讯录: this.data.setting.name,imageUrl: this.data.setting.share_img,path: pages/shar…

GO学习之 互斥锁、读写锁该如何取舍

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

Postman使用json提取器和正则表达式实现接口的关联

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;使用json提取器实现接口关联 实际项目场景&#xff0c;在财务信息页面&#xff0c;需要上传一个营业执照&…

C++进阶-STL set/multiset容器和map容器的简单认识

set/multiset容器的简单认识 set基本概念set与multiset 的区别&#xff1a;set容器的构造和赋值set容器的大小和交换set容器的插入与删除set容器的查找和统计set容器-set和multiset的区别set容器内置类型指定排序规则set容器自定义数据类型指定排序规则 pair对组创建map容器的基…

【3年轻量】腾讯云2核2G4M和2核4G5M服务器配置优惠价格表

腾讯云轻量应用服务器特价是有新用户限制的&#xff0c;所以阿腾云建议大家选择3年期轻量应用服务器&#xff0c;一劳永逸&#xff0c;免去续费困扰。腾讯云轻量应用服务器3年可以选择2核2G4M和2核4G5M带宽&#xff0c;3年轻量2核2G4M服务器540元&#xff0c;2核4G5M轻量应用服…

ES-java

全文搜索&#xff0c;拆分&#xff0c;分词--获得id&#xff0c;获取部分数据装载进去&#xff0c;简化版数据&#xff0c;用一种状态展示出来&#xff0c;点击详情走的是数据库查询查看显示详情 倒排索引&#xff08;特征&#xff09;&#xff0c;创建文档&#xff0c;使用文…

.net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler

asp.net core IHttpClientFactroy 进行SSL(https)请求时注入ConfigurePrimaryHttpMessageHandler解决https请求错误&#xff1a; static public class CreditScoreServiceExtension{static public void AddCreditScoreQueryServiceHttpClient(this IServiceCollection services…

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群 Redis 的多种模式Redis-Alone 单机模式Redis 单机模式的优缺点 Redis 高可用集群模式Redis-Master/Slaver 主从模式Redis-Master/Slaver 哨兵模式哨兵模式监控的原理Redis 节点主客观下线标记Redis 节点主客观…

Vue组件传

跟禹神学vue--总结 1 父组件给子组件传递参数--props传参 &#xff08;1&#xff09;父组件中准备好数据 data() {return {todos:[{id:001,title:01,done:true},{id:002,title:02,done:false},{id:003,title:03,done:true}]} } &#xff08;2&#xff09;父组件中引入子组件…

django建站过程(4)创建文档显示页面

django建站过程&#xff08;4&#xff09;创建文档显示页面 创建文档显示页面项目主文件夹schoolapps中的文件urls.py在APP“baseapps”中创建url.py文件编写视图模板继承bootstrap创建head.html创建doclist.html创建docdetail.html 使用 markdown 编辑器安装模块Model 模型的d…

Azure 机器学习 - 机器学习中的企业安全和治理

目录 限制对资源和操作的访问网络安全性和隔离数据加密数据渗透防护漏洞扫描审核和管理合规性 在本文中&#xff0c;你将了解可用于 Azure 机器学习的安全和治理功能。 如果管理员、DevOps 和 MLOps 想要创建符合公司策略的安全配置&#xff0c;那么这些功能对其十分有用。 通过…

Unity中全局光照GI的总结

文章目录 前言一、在编写Shader时&#xff0c;有一些隐蔽的Bug不会直接报错&#xff0c;我们需要编译一下让它显示出来&#xff0c;方便修改我们选择我们的Shader&#xff0c;点击编译并且展示编译后的Shader后的内容&#xff0c;隐蔽的Bug就会暴露出来了。 二、我们大概回顾一…