IRONSOFTWAREHOME

C# SQL 接続チュートリアル:Dapper + SQL Server データベースの説明

C#アプリ 完成までのレッスン10 - SQL接続

Tim Corey

1h 15m 23s

Tim Coreyの"C#アプリケーションの開始から終了まで"シリーズのレッスン10では、TimがDapperを使用してC#アプリケーションをSQL Serverデータベースに接続する方法について説明しています。 前回のレッスンでは、アプリはSQLとやり取りしているふりをする偽のデータアクセス層を使用していました。 このビデオで、Timはそのプレースホルダーコードを実際のSQL接続ロジックに置き換え、クリーンでスケーラブル、そして簡単に保守できる方法で本当のデータベース接続を設定する方法を示しています。

この記事では、Timがカバーする主要な概念を分解し、C# SQL接続やSQL Serverに初心者でも理解できるように説明します。

プロジェクトのセットアップとクリーンアップ

Timは最初にソリューションの構造を確認し、前回のレッスンで行った変更を確認します。 Program.csでは、SQL Serverとテキストファイルデータベースの両方に接続するコードを追加し、データベース接続を即座にテストできるように起動フォームを"Create Prize"フォームに変更したと説明しています。

次に、プロジェクト構造を整理し、2つのフォルダーを作成します。

  • モデル

  • データアクセス

これはソースコードの機能には影響しませんが、組織化を助けると指摘しています。 プロジェクトに後で戻るときに、クリーンな構造と一貫した名前付けは、保守と拡張をはるかに簡単にします。

なぜDapper?

Timは、SQL接続にORM(オブジェクト関係マッピング)としてDapperを使用すると説明しています。 Dapperは生のSQLコマンドとEntity Frameworkのようなより高レベルなORMの間に位置します。

TimはDapperを好む理由は以下の通りです。

  • 生のADO.NETとほとんど同じ速さ

  • Entity Frameworkよりもシンプル

  • 不必要な複雑さと大量のボイラープレートコードを回避

特に小規模なアプリケーションでは、Entity Frameworkは遅くて重いことがあると述べています。 彼のプロジェクトでは、Dapperは性能とシンプルさの適切なバランスを提供します。

Dapperのインストール

TimはVisual StudioのNuGetパッケージマネージャーを通じてDapperをインストールする方法を示しています。 インストール後、Dapperはプロジェクトの参照に表示され、SQL接続コードはクリーンで読みやすくなります。

接続文字列の追加

Dapperを使用するには、接続文字列が必要です。 TimはそれをUIプロジェクトのapp.configファイルに追加します。ライブラリプロジェクトではないのは、ライブラリがDLLであり独自の設定を持たないからです。

接続文字列には以下が含まれます。

  • Data Source(サーバー名またはマシンドメイン名)

  • Initial Catalog(データベース名)

  • Integrated Security(Windows認証)

  • 接続タイムアウト

  • User IDとPassword(Windows認証を使用していない場合)

Timの例では、Windows認証を意味する信頼済み接続を使用しています。

データ ソース=SQL2016;初期カタログ=トーナメント;統合セキュリティ=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またはテキストファイル)を変更し、コアコードを変更せずに済みます。

usingブロックは重要です。これは、コードがブロックを抜けるときに接続が自動的に閉じられることを保証します。 これは、接続プールを使い果たす可能性のあるオープンな接続やデータベースサーバーでエラーを引き起こすことを避けるためです。

ストアドプロシージャの作成

C#内で生のSQLを書く代わりに、Timはストアドプロシージャを使用します。 これにより、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が不整合になることがあります。

したがって、彼は設計を変更し、1つのコネクタのみが一度に実行されるようにします。彼はenumを追加します。

データベースタイプ
{
SQL,
テキストファイル
}
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にメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。