C#应用程序与数据库的集成几种方法

前言

应用程序集成数据库是许多软件项目的关键方面。无论构建的是Web应用程序、桌面应用程序还是移动应用程序,高效无缝地与数据库集成,对于存储、检索和操作数据都至关重要。本文将介绍数据库与C#应用程序集成的几种方法与使用注意事项。

数据库

开发应用程序时,我们会为应用选择使用的数据库,这是至关重要的一步。通常会根据实际情况考虑一些因素,如可扩展性、性能、数据结构、复杂性和预算等。以下也是一些常用选项:

1、关系数据库

SQL Server: 微软提供的功能丰富的关系数据库管理系统。

MySQL、PostgreSQL、Oracle、Informix等: 使用广泛且具有强大的社区支持的关系数据库。

2、非关系数据库(NoSQL)

Redis: 一个高性能的内存数据存储,用于缓存和实时分析。

MongoDB: 一个流行的面向文档的NoSQL数据库。

Memcached: 一种开源的高性能分布式内存对象缓存系统。

3、关系映射框架

Entity Framework Core: 由微软开发的轻量级 ORM 框架。

Dapper:一个简单的对象映射器。

SqlSugar:一款 .NET 开源ORM框架。

Chloe: 一款 .NET 轻量级的 ORM 框架。

方法简介

1、ADO.NET

ADO.NET 是NET框架中,用于访问关系数据库中数据的组件。它提供了一套丰富的功能,可直接使用 SQL 命令处理数据库交互。它提供了对数据库交互的低级控制,可能很冗长并且容易出错。以下是连接到SQL Server数据库的简单示例:

using Microsoft.Data.SqlClient;using System.Xml;
namespace Fountain.WinConsole.OtherDemo{    internal class Program    {        static void Main(string[] args)        {            // 创建 Connection 对象            using (SqlConnection sqlConnection = new SqlConnection())            {                // 通过 ConnectionString 属性连接数据库                sqlConnection.ConnectionString = "server=127.0.0.1,1433;Enlist=true;Pooling=true; uid=sa;pwd=sa123456;connection Timeout=30;database=CRMS;Max Pool Size=600";                // 创建一个 SqlCommand 对象                SqlCommand sqlCommand = sqlConnection.CreateCommand();                // 命令的类型为Text                sqlCommand.CommandType = System.Data.CommandType.Text;                // 执行命令SQL语句                sqlCommand.CommandText = "select * from user";                // 执行命令返回 DataReader                SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();                // 输出标题                Console.WriteLine($"|{"编号",-20}|{"名称",20}|");                while (sqlDataReader.Read())                {                    // 输出行结果                    Console.WriteLine($"|{sqlDataReader["Code"],-20}|{sqlDataReader["Name"],20}|");                }            }        }    }}

2、Entity Framework Core

Entity Framework Core 是轻量化、可扩展、开源和跨平台的常用 Entity Framework 数据访问技术。它允许我们使用特定的对象和LINQ查询来处理数据库,无需编写原始SQL查询。以下是使用 EF Core 的示例:​​​​​​​

using Microsoft.EntityFrameworkCore;using System.Xml;
namespace Fountain.WinConsole.OtherDemo{    internal class Program    {        static void Main(string[] args)        {            using (var context = new UserDbContext())            {                var entity = new UserEntity { Name = "admin" };                context.UserEntities.Add(entity);                context.SaveChanges();            }        }    }    /// <summary>    /// 用户实体    /// </summary>    public class UserEntity    {        /// <summary>        /// 编码        /// </summary>        public int Code { get; set; }        /// <summary>        /// 名称        /// </summary>        public string Name { get; set; }=string.Empty;    }    /// <summary>    ///     /// </summary>        public class UserDbContext : DbContext    {        public DbSet<UserEntity> UserEntities { get; set; }        /// <summary>        ///         /// </summary>        /// <param name="options"></param>        protected override void OnConfiguring(DbContextOptionsBuilder options)        {            string connectionString = "Server=127.0.0.1;Database=CRMS;User Id=sa;Password=sa123456;";            options.UseSqlServer(connectionString);        }    }}

3、Dapper

Dapper 是一个专注于原始性能、简单易用、轻量级的ORM框架。它提供了扩展方法 IDbConnection,将数据库查询映射到对象或动态类型。Dapper 需要手动编写SQL语句,提供了更好的性能。以下是使用Dapper的示例:​​​​​​​

using Dapper;using System;using System.Data;using System.Data.SqlClient;
namespace Fountain.WinConsole.OtherDemo{    internal class Program    {        static void Main(string[] args)        {            string connectionString = "Server=127.0.0.1;Database=CRMS;User Id=sa;Password=pwd123456;";            using (IDbConnection connection = new SqlConnection(connectionString))            {                var result = connection.Query<UserEntity>("select * from user");                foreach (var entity in result)                {                    Console.WriteLine($"{entity.Code}, {entity.Name}");                }            }        }    }    /// <summary>    /// 用户实体    /// </summary>    public class UserEntity    {        /// <summary>        /// 编码        /// </summary>        public int Code { get; set; }        /// <summary>        /// 名称        /// </summary>        public string Name { get; set; }    }}

4、SqlSugar

SqlSugar 是一款非常轻量级并且特别强大的ORM,支持常见的关系型数据库如 SQL Server、Oracle、MySQL等。拥有媲美原生的性能且能满足各种需求的功能,简单易用。以下是使用 SqlSugar 的示例:​​​​​​​

using SqlSugar;using System.Data;using System.Xml;using static System.Net.Mime.MediaTypeNames;
namespace Fountain.WinConsole.OtherDemo{    internal class Program    {        static void Main(string[] args)        {            //数据库链接            var db = new SqlSugarClient(new ConnectionConfig()            {                ConnectionString = "Server=127.0.0.1;Database=CRMS;User Id=sa;Password=sa123456;",                //指定数据库类型                DbType = SqlSugar.DbType.SqlServer,                //链接使用完后是否自动释放                IsAutoCloseConnection = true,            });            // 获取            UserEntity userEntity= db.Queryable<UserEntity>().First();            // 输出            Console.WriteLine($"{userEntity.Code}, {userEntity.Name}");            // 按任意键推出            Console.ReadLine();        }    }    /// <summary>    /// 用户实体    /// </summary>    public class UserEntity    {        /// <summary>        /// 编码        /// </summary>        public int Code { get; set; }        /// <summary>        /// 名称        /// </summary>        public string Name { get; set; }=string.Empty;    }}

使用事项

无论我们选择哪种方法,在使用时都须考虑以下一些行为规范:

1、参数化查询:始终使用参数化查询来防止SQL注入攻击。

2、连接池:利用连接池来提高性能和资源利用率。

3、错误处理:实施适当的错误处理和日志记录,以处理与数据库相关的异常。

4、优化:优化数据库查询和索引以获得更好的性能。

5、安全性:应用适当的安全措施,如加密和访问控制来保护敏感数据。

小结

以上是对应用程序与数据库集成的简单介绍,了解权衡和最佳实践对于成功集成至关重要。通过选择正确的数据库和集成策略,您可以确保高效的数据管理,并提高C#应用程序的整体性能。如有不到之处,请多多包涵。

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

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

相关文章

LeetCode热题3.无重复的最长字串

前言: 经过前序的一系列数据结构和算法学习后&#xff0c;开始用leetCode热题练练手。 . - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为…

XGBoost预测及调参过程(+变量重要性)--血友病计数数据

所使用的数据是血友病数据&#xff0c;如有需要&#xff0c;可在主页资源处获取&#xff0c;数据信息如下&#xff1a; 读取数据及数据集区分 数据预处理及区分数据集代码如下&#xff08;详细预处理说明见上篇文章--随机森林&#xff09;&#xff1a; import pandas as pd im…

异常封装类统一后端响应的数据格式

异常封装类 如何统一后端响应的数据格式 1. 背景 后端作为数据的处理和响应&#xff0c;如何才能和前端配合好&#xff0c;能够高效的完成任务&#xff0c;其中一个比较重要的点就是后端返回的数据格式。 没有统一的响应格式&#xff1a; // 第一种&#xff1a; {"dat…

探索开源世界:2024年值得关注的热门开源项目推荐

文章目录 每日一句正能量前言GitCode成立背景如何使用GitCode如何把你现有的项目迁移至 GitCode&#xff1f;热门开源项目推荐actions-poetry - 管理 Python 依赖项的 GitLab CI/CD 工具项目概述技术分析应用场景特点项目地址 Spider - 网络爬虫框架项目简介技术分析应用场景项…

【RabbitMQ】异步消息及Rabbitmq安装

https://blog.csdn.net/weixin_73077810/article/details/133836287 https://www.bilibili.com/video/BV1mN4y1Z7t9/ 同步调用和异步调用 如果我们的业务需要实时得到服务提供方的响应&#xff0c;则应该选择同步通讯&#xff08;同步调用&#xff09;。 如果我们追求更高的效…

Jupyter Notebook简介

目录 1.概述 2.诞生背景 3.历史版本 4.安装 5.卸载 6.如何使用 7.菜单和菜单项 8.示例 9.未来展望 10.总结 1.概述 Jupyter Notebook是一种基于Web的交互式计算环境&#xff0c;主要用于数据分析、数据科学、机器学习以及探索性编程等领域。允许用户在单个文档中编写…

17.EventLoop-IO任务

服务端代码 package com.xkj.learn;import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInitializer; im…

.Net多线程Threading相关详解

一、线程不安全例子 计数 const int total 100_000;int count 0;var thread1 new Thread(Increment); var thread2 new Thread(Increment);thread1.Start(); thread2.Start();thread1.Join(); thread2.Join();Console.WriteLine($"Count: {count}");void Incre…

批量文本编辑神器:一键拆分每行内容,高效实现批量处理与保存,让文本编辑更高效快捷!

在信息化快速发展的今天&#xff0c;文本编辑已经成为我们工作、学习和生活中不可或缺的一部分。然而&#xff0c;面对大量的文本内容&#xff0c;如何高效地进行编辑和处理&#xff0c;成为了许多人面临的难题。今天&#xff0c;我要向大家介绍一款批量文本编辑神器&#xff0…

mp4-wasm基本使用mp4-wasm将canvas保存为MP4视频

mp4-wasm 它使用 WebAssembly 技术来提供 MP4 文件的解析或处理功能。示例 安装 npm i mp4-wasm引用 import loadMP4Module from mp4-wasm/build/mp4;常用API // 初始化 const MP4 await loadMP4Module(); const encoder MP4.createWebCodecsEncoder({width: 1080,heigh…

【C#】图形图像编程

实验目标和要求&#xff1a; 掌握C#图形绘制基本概念&#xff1b;掌握C#字体处理&#xff1b;能进行C#图形图像综合设计。 运行效果如下所示&#xff1a; 1.功能说明与核心代码 使用panel为画板&#xff0c;完成以下设计内容&#xff1a; 使用pen绘制基础图形&#xff1b;使…

华为OD刷题C卷 - 每日刷题32(执行任务赚积分,计算三叉搜索树的高度)

1、&#xff08;执行任务赚积分&#xff09;&#xff1a; 这段代码是解决“执行任务赚积分”的问题。它提供了一个Java类Main&#xff0c;其中包含main方法和getResult方法&#xff0c;用于计算在有限的时间内&#xff0c;处理任务可以获得的最多积分。 main方法首先读取任务…

【MYSQL】MYSQL操作库

1.数据库字符编码集/数据库校验集 当我们在数据库中保存数据时&#xff0c;需要存和取时候编码一致&#xff0c;比方说你用汉语保存的数据&#xff0c;当你读的时候为了避免乱码问题&#xff0c;也必须用汉语读&#xff0c;这就叫做数据库字符编码集一致。 当我们进行查找&…

C语言的结构体与联合体

引言 C语言提供了结构体和联合体两种聚合数据类型&#xff0c;使得程序员可以创建包括多个数据类型的复杂数据结构。结构体用于将不同类型的数据组合成一个单元&#xff0c;而联合体用于在同一存储空间中存储不同类型的数据。本篇文章将详细介绍C语言中的结构体和联合体&#x…

快消品经销商如何进行有效的团队激励?

很多经销商会面临员工工作不积极、吃大锅饭的现象&#xff0c;导致企业人力成本浪费严重&#xff0c;工作效率也得不到提升&#xff0c;因此经销商老板们必须进行一些绩效考核&#xff0c;然后开展一些有效的激励政策&#xff0c;这样通过提成激励来提高员工的积极性。 1、梳理…

探地雷达正演模拟,基于时域有限差分方法,四

突然发现第三章后半部分已经讲了使用接收记录成像的问题&#xff0c;所以这一章只讲解简单的数据分析。 &#xff08;均以宽角法数据为例子&#xff0c;剖面法数据处理方式都是相同的&#xff09;假设&#xff0c;我们现在已经获得了一个GPR记录&#xff0c;可以是常用的.sgy格…

有关排序的算法

目录 选择法排序 冒泡法排序 qsort排序&#xff08;快速排序&#xff09; qsort排序整型 qsort排序结构体类型 排序是我们日常生活中比较常见的问题&#xff0c;这里我们来说叨几个排序的算法。 比如有一个一维数组 arr[8] {2,5,3,1,7,6,4,8},我们想要把它排成升序&#…

StarNet实战:使用StarNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 https://arxiv.org/pdf/2403.19967 论文主要集中在介绍和分析一种新兴的学习范式——星操作&#xff08;Star Operation&#xff09;&#xff0c;这是一种通过元素级乘法融合不同子…

排序-快速排序

快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;由英国计算机科学家霍尔&#xff08;C. A. R. Hoare&#xff09;在1960年提出。它的基本思想是&#xff1a;通过一趟排序将待排记录分隔成独立的两部分&#xff0c;其中一部分记录的关键字均比另一…

探究Spring Boot自动配置的底层原理

在当今的软件开发领域&#xff0c;Spring Boot已经成为了构建Java应用程序的首选框架之一。它以其简单易用的特性和强大的功能而闻名&#xff0c;其中最引人注目的特性之一就是自动配置&#xff08;Auto-Configuration&#xff09;。Spring Boot的自动配置能够极大地简化开发人…