C#應(yīng)用程序與數(shù)據(jù)庫的集成幾種方法
前言
應(yīng)用程序集成數(shù)據(jù)庫是許多軟件項(xiàng)目的關(guān)鍵方面。無論構(gòu)建的是Web應(yīng)用程序、桌面應(yīng)用程序還是移動(dòng)應(yīng)用程序,高效無縫地與數(shù)據(jù)庫集成,對(duì)于存儲(chǔ)、檢索和操作數(shù)據(jù)都至關(guān)重要。本文將介紹數(shù)據(jù)庫與C#應(yīng)用程序集成的幾種方法與使用注意事項(xiàng)。
數(shù)據(jù)庫
開發(fā)應(yīng)用程序時(shí),我們會(huì)為應(yīng)用選擇使用的數(shù)據(jù)庫,這是至關(guān)重要的一步。通常會(huì)根據(jù)實(shí)際情況考慮一些因素,如可擴(kuò)展性、性能、數(shù)據(jù)結(jié)構(gòu)、復(fù)雜性和預(yù)算等。以下也是一些常用選項(xiàng):
1、關(guān)系數(shù)據(jù)庫
SQL Server: 微軟提供的功能豐富的關(guān)系數(shù)據(jù)庫管理系統(tǒng)。
MySQL、PostgreSQL、Oracle、Informix等: 使用廣泛且具有強(qiáng)大的社區(qū)支持的關(guān)系數(shù)據(jù)庫。
2、非關(guān)系數(shù)據(jù)庫(NoSQL)
Redis: 一個(gè)高性能的內(nèi)存數(shù)據(jù)存儲(chǔ),用于緩存和實(shí)時(shí)分析。
MongoDB: 一個(gè)流行的面向文檔的NoSQL數(shù)據(jù)庫。
Memcached: 一種開源的高性能分布式內(nèi)存對(duì)象緩存系統(tǒng)。
3、關(guān)系映射框架
Entity Framework Core: 由微軟開發(fā)的輕量級(jí) ORM 框架。
Dapper:一個(gè)簡(jiǎn)單的對(duì)象映射器。
SqlSugar:一款 .NET 開源ORM框架。
Chloe: 一款 .NET 輕量級(jí)的 ORM 框架。
方法簡(jiǎn)介
1、ADO.NET
ADO.NET 是NET框架中,用于訪問關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的組件。它提供了一套豐富的功能,可直接使用 SQL 命令處理數(shù)據(jù)庫交互。它提供了對(duì)數(shù)據(jù)庫交互的低級(jí)控制,可能很冗長(zhǎng)并且容易出錯(cuò)。以下是連接到SQL Server數(shù)據(jù)庫的簡(jiǎn)單示例:
using Microsoft.Data.SqlClient; using System.Xml; namespace Fountain.WinConsole.OtherDemo { internal class Program { static void Main(string[] args) { // 創(chuàng)建 Connection 對(duì)象 using (SqlConnection sqlConnection = new SqlConnection()) { // 通過 ConnectionString 屬性連接數(shù)據(jù)庫 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"; // 創(chuàng)建一個(gè) SqlCommand 對(duì)象 SqlCommand sqlCommand = sqlConnection.CreateCommand(); // 命令的類型為Text sqlCommand.CommandType = System.Data.CommandType.Text; // 執(zhí)行命令SQL語句 sqlCommand.CommandText = "select * from user"; // 執(zhí)行命令返回 DataReader SqlDataReader sqlDataReader = sqlCommand.ExecuteReader(); // 輸出標(biāo)題 Console.WriteLine($"|{"編號(hào)",-20}|{"名稱",20}|"); while (sqlDataReader.Read()) { // 輸出行結(jié)果 Console.WriteLine($"|{sqlDataReader["Code"],-20}|{sqlDataReader["Name"],20}|"); } } } } }
2、Entity Framework Core
Entity Framework Core 是輕量化、可擴(kuò)展、開源和跨平臺(tái)的常用 Entity Framework 數(shù)據(jù)訪問技術(shù)。它允許我們使用特定的對(duì)象和LINQ查詢來處理數(shù)據(jù)庫,無需編寫原始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> /// 用戶實(shí)體 /// </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 是一個(gè)專注于原始性能、簡(jiǎn)單易用、輕量級(jí)的ORM框架。它提供了擴(kuò)展方法 IDbConnection,將數(shù)據(jù)庫查詢映射到對(duì)象或動(dòng)態(tài)類型。Dapper 需要手動(dòng)編寫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> /// 用戶實(shí)體 /// </summary> public class UserEntity { /// <summary> /// 編碼 /// </summary> public int Code { get; set; } /// <summary> /// 名稱 /// </summary> public string Name { get; set; } } }
4、SqlSugar
SqlSugar 是一款非常輕量級(jí)并且特別強(qiáng)大的ORM,支持常見的關(guān)系型數(shù)據(jù)庫如 SQL Server、Oracle、MySQL等。擁有媲美原生的性能且能滿足各種需求的功能,簡(jiǎn)單易用。以下是使用 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) { //數(shù)據(jù)庫鏈接 var db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "Server=127.0.0.1;Database=CRMS;User Id=sa;Password=sa123456;", //指定數(shù)據(jù)庫類型 DbType = SqlSugar.DbType.SqlServer, //鏈接使用完后是否自動(dòng)釋放 IsAutoCloseConnection = true, }); // 獲取 UserEntity userEntity= db.Queryable<UserEntity>().First(); // 輸出 Console.WriteLine($"{userEntity.Code}, {userEntity.Name}"); // 按任意鍵推出 Console.ReadLine(); } } /// <summary> /// 用戶實(shí)體 /// </summary> public class UserEntity { /// <summary> /// 編碼 /// </summary> public int Code { get; set; } /// <summary> /// 名稱 /// </summary> public string Name { get; set; }=string.Empty; } }
使用事項(xiàng)
無論我們選擇哪種方法,在使用時(shí)都須考慮以下一些行為規(guī)范:
1、參數(shù)化查詢:始終使用參數(shù)化查詢來防止SQL注入攻擊。
2、連接池:利用連接池來提高性能和資源利用率。
3、錯(cuò)誤處理:實(shí)施適當(dāng)?shù)腻e(cuò)誤處理和日志記錄,以處理與數(shù)據(jù)庫相關(guān)的異常。
4、優(yōu)化:優(yōu)化數(shù)據(jù)庫查詢和索引以獲得更好的性能。
5、安全性:應(yīng)用適當(dāng)?shù)陌踩胧?,如加密和訪問控制來保護(hù)敏感數(shù)據(jù)。
小結(jié)
以上是對(duì)應(yīng)用程序與數(shù)據(jù)庫集成的簡(jiǎn)單介紹,了解權(quán)衡和最佳實(shí)踐對(duì)于成功集成至關(guān)重要。通過選擇正確的數(shù)據(jù)庫和集成策略,您可以確保高效的數(shù)據(jù)管理,并提高C#應(yīng)用程序的整體性能。如有不到之處,請(qǐng)多多包涵。
到此這篇關(guān)于C#應(yīng)用程序與數(shù)據(jù)庫的集成幾種方法的文章就介紹到這了,更多相關(guān)C#應(yīng)用程序與數(shù)據(jù)庫集成內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在WPF中合并兩個(gè)ObservableCollection集合
這篇文章介紹了在WPF中合并兩個(gè)ObservableCollection集合的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C# ListView 點(diǎn)擊表頭對(duì)數(shù)據(jù)進(jìn)行排序功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了C# ListView 點(diǎn)擊表頭對(duì)數(shù)據(jù)進(jìn)行排序功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-04-04分享WCF聊天程序--WCFChat實(shí)現(xiàn)代碼
無意中在一個(gè)國外的站點(diǎn)下到了一個(gè)利用WCF實(shí)現(xiàn)聊天的程序,作者是:Nikola Paljetak。研究了一下,自己做了測(cè)試和部分修改,感覺還不錯(cuò),分享給大家2015-11-11C#實(shí)現(xiàn)可緩存網(wǎng)頁到本地的反向代理工具實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)可緩存網(wǎng)頁到本地的反向代理工具,實(shí)例分析了C#實(shí)現(xiàn)反向代理的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Unity游戲開發(fā)之2048游戲的實(shí)現(xiàn)
2048是一款數(shù)字益智游戲,初始數(shù)字則是由2+2組成的基數(shù)4。在操作方面的不同則表現(xiàn)為一步一格的移動(dòng),變成更為爽快的一次到底。相同數(shù)字的方?jīng)r在靠攏、相撞時(shí)會(huì)相加。本文將通過Unity3D實(shí)現(xiàn)這一游戲,需要的可以參考一下2022-03-03