跳至頁尾內容
Iron Academy Logo
C#應用程式
C#應用程式

其他類別

C# SQL 連接教程:Dapper + SQL Server資料庫解析

[[academy-video-youtube({"vid": "WGbTM198-eA", "start_time": "0", "title": "C# App Start To Finish Lesson 10 - SQL Connection", "creator": "Tim Corey", "length": "1h 15m 23s"})]]

在Tim Corey的"C# App Start to Finish"系列第10課中,Tim解釋了如何使用 Dapper 將C#應用程式連接到SQL Server資料庫。 在上一課中,應用程式使用了一個的資料存取層,該層僅假裝與SQL對話。 在這個影片中,Tim用真正的SQL 連接邏輯替換了該佔位符程式碼,並展示了如何以乾淨、可擴展和易於維護的方式設置一個真正的資料庫連接。

這篇文章分解了Tim所涵蓋的關鍵概念,並以即使您是C# SQL連接或SQL Server新手也能理解的方式進行了解釋。

專案設置與清理

Tim首先審視了解決方案結構,並確認了上一課所做的更改。 在Program.cs中,他解釋了他新增了程式碼來連接SQL Server和文字文件資料庫,並將啟動表單更改為"建立獎品"表單,以便他可以立即測試資料庫連接。

然後他通過建立兩個文件夾來清理專案結構:

  • Models

  • DataAccess

他指出這不會影響源程式碼的功能,但有助於組織。 當您以後返回專案時,乾淨的結構和一致的命名使維護和擴展變得更加容易。

為什麼選擇Dapper?

Tim解釋了他將使用Dapper作為SQL連接的ORM(物件關係映射器)。 Dapper位於原生SQL命令和更高級的ORM(例如Entity Framework)之間。

Tim更喜歡Dapper是因為它是:

  • 幾乎與原生ADO.NET一樣快

  • 比Entity Framework更簡單

  • 避免了不必要的複雜性和繁重樣板程式碼

他提到Entity Framework可能會更慢且更重,特別是對於小型應用程式來說。 對於他的專案,Dapper在性能和簡單性之間提供了合適的平衡。

安裝Dapper

Tim演示了通過Visual Studio中的NuGet包管理器安裝Dapper。 安裝完成後,Dapper出現在專案引用中,SQL連接程式碼變得乾淨且可讀。

新增連接字串

要使用Dapper,您需要一個連接字串。 Tim將其新增到UI項目的app.config文件中,而不是程式庫項目中,因為程式庫是DLL且沒有自己的配置。

連接字串包括:

  • 資料來源(伺服器名稱或機器域名稱)

  • 初始目錄(資料庫名稱)

  • 整合安全性(Windows身份驗證)

  • 連接超時

  • 使用者ID和密碼(如果不使用Windows身份驗證)

在Tim的例子中,他使用可信連接,即Windows身份驗證:

Data Source=SQL2016;Initial Catalog=Tournaments;Integrated Security=True;

他強調這避免了在文件中儲存SQL Server使用者憑據。

GlobalConfig:獲取連接字串

為了檢索連接字串,Tim在GlobalConfig中新增了一個方法:

public static string GetConnectionString(string name)
{
    return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}

此方法從配置文件中提取連接字串並返回它。 Tim還新增了所需的System.Configuration引用。

建立SQL連接

Tim刪除佔位符程式碼,並使用以下程式碼建立真正的SqlConnection:

using (IDbConnection connection = new SqlConnection(
    GlobalConfig.GetConnectionString("tournaments")))
{
    // SQL邏輯在這裡
}

他使用IDbConnection介面,所以他可以在不更改核心程式碼的情況下交換資料庫型別(SQL或文字文件)。

使用塊很重要,因為它確保在程式碼退出塊時自動關閉連接。 這避免了開放的連接可能耗盡連接池或導致資料庫伺服器上的錯誤。

建立儲存過程

Tim不是在C#中寫原生SQL,而是使用儲存過程。 這使得SQL邏輯保留在資料庫中,並減少了SQL注入等風險。

他建立了一個名為的儲存過程:

dbo.SP_Prizes_Insert

此過程接受與獎品表匹配的參數:

  • @PlaceNumber

  • @PlaceName

  • @PrizeAmount

  • @PrizePercentage

  • @ID(輸出)

輸出參數使用以下方式返回新生成的ID:

SELECT @ID = SCOPE_IDENTITY()

這確保新記錄ID返回到C#應用程式。

Dapper中的動態參數

回到C#中,Tim使用Dapper的DynamicParameters向儲存過程發送參數:

var p = new DynamicParameters();
p.Add("@PlaceNumber", model.PlaceNumber);
p.Add("@PlaceName", model.PlaceName);
p.Add("@PrizeAmount", model.PrizeAmount);
p.Add("@PrizePercentage", model.PrizePercentage);
p.Add("@ID", 0, dbType: DbType.Int32, direction: ParameterDirection.Output);

ID被標記為輸出,Dapper處理參數映射。

執行儲存過程

他執行儲存過程:

connection.Execute("dbo.SP_Prizes_Insert", p, commandType: CommandType.StoredProcedure);

使用Execute是因為它執行插入操作,不像SELECT語句返回行。

執行後,程式碼檢索ID:

model.ID = p.Get<int>("@ID");
return model;

測試與結果

Tim運行應用程式,填寫表單並點擊建立獎品。資料成功插入到SQL Server資料庫中。 他進行了測試:

  • 獎品金額

  • 獎品百分比

兩者都能正常運作,證明資料庫連接和儲存過程功能正常。

設計挑戰:多個資料連接器 (1:01:50)

Tim指出了一個設計問題:同時使用SQL和文字文件連接器會導致不一致的ID。

因此,他更改了設計,以便一次只運行一個連接器。他新增了一個enum:

DatabaseType
{
    SQL,
    TextFile
}

這確保應用程式始終使用一致的資料庫型別,並防止混合來自不同來源的資料庫資料。

結論

Tim Corey的第10課展示了使用Dapper將C#應用程式連接到SQL Server的實際方法。 他涵蓋了:

  • 新增連接字串

  • 使用SqlConnection

  • 安全地打開和關閉連接

  • 使用儲存過程

  • 避免SQL注入

  • 適用於多個資料源的正確架構

如果您想要一種乾淨、快速且易於維護的方式將C#連接到SQL Server資料庫,此課程是完美的指南。

Hero Worlddot related to C# SQL 連接教程:Dapper + SQL Server資料庫解析
Hero Affiliate related to C# SQL 連接教程:Dapper + SQL Server資料庫解析

分享您所愛以賺取更多報酬

您是否為使用 .NET、C#、Java、Python 或 Node.js 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話