IRONSOFTWAREHOME

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

C# App Start To Finish Lesson 10 - SQL Connection

Tim Corey

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;
Text

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

GlobalConfig:獲取連接字串

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

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

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

建立SQL連接

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

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

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

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

建立儲存過程

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

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

dbo.SP_Prizes_Insert
Text

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

  • @PlaceNumber

  • @PlaceName

  • @PrizeAmount

  • @PrizePercentage

  • @ID(輸出)

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

SELECT @ID = SCOPE_IDENTITY()
Text

這確保新記錄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);
Text

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

執行儲存過程

他執行儲存過程:

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

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

執行後,程式碼檢索ID:

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

測試與結果

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

  • 獎品金額

  • 獎品百分比

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

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

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

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

DatabaseType
{
    SQL,
    TextFile
}
Text

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

結論

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

  • 新增連接字串

  • 使用SqlConnection

  • 安全地打開和關閉連接

  • 使用儲存過程

  • 避免SQL注入

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

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

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
獲取您的無義務諮詢
填寫以下表格或發送電子郵件至sales@ironsoftware.com
您的詳細資訊將始終保密。
被全球數百萬工程師信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立