ASP.NET Core アプリケーションで SqlClient, SqlConnection を利用する手順を紹介します。
ASP.NET Core アプリケーションでSqlConnectionを利用する場合、using System.Data.SqlClient
を記述しただけでは、SqlConnectionを利用できません。
この記事では、System.Data.SqlClientのアセンブリの参照を追加して、SqlConnectionを利用できるようにする手順を紹介します。
ASP.NET Coreアプリケーションを作成して、Startup.cs に下記のコードを記述します。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace SimpleExecSql
{
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
SqlConnection con;
});
});
}
}
}
上記のプロジェクトをビルドします。ビルドするとエラーが発生します。
エラーメッセージは次のものが表示されます。
デフォルトで参照する System.Data.SqlClient
アセンブリには、SqlConnectionが含まれていないことが原因です。
SqlConnectionが含まれている、System.Data.SqlClient
アセンブリを参照に追加します。
NuGetを利用して System.Data.SqlClient
アセンブリの参照を追加します。
[ソリューション エクスプローラー]ウィンドウで、System.Data.SqlClient のアセンブリの参照を追加するプロジェクトのノードを開き、
[依存関係]のノードをクリックして選択します。選択状態で右クリックし、ポップアップメニューを表示します。メニューの[NuGet パッケージの管理]の項目をクリックします。
[NuGet パッケージ マネージャー]のウィンドウが表示されます。上部の[参照]のタブをクリックして選択します。下図の画面が表示されます。
[参照]タブの下の検索テキストボックスに、"System.Data.SqlClient" を入力して検索します。検索結果が左側のエリアに表示されます。
検索結果にある、"System.Data.SqlClient"の項目をクリックして選択します。
"System.Data.SqlClient"の項目が選択されると、詳細情報が右側に表示されます。
デフォルトでは、[バージョン]のコンボボックスは "最新の安定版" のバージョンが選択されています。[インストール]ボタンをクリックして
パッケージをインストールします。~
[変更のプレビュー]ダイアログが表示されます。[OK]ボタンをクリックします。
続いて[ライセンスへの同意]ダイアログが表示されます。こちらもダイアログ下部の[同意する]ボタンをクリックします。
パッケージのインストールが実行されます。インストールが完了すると、[インストール]ボタンの表示が[アンインストール]に変わります。
プロジェクトをビルドします。エラーが発生せずにビルドできることが確認できます。
プロジェクトファイルの内容を確認します。ItemGroup タグが追加され、"System.Data.SqlClient" への参照が追加されていることが確認できます。
[ソリューション エクスプローラー]ウィンドウで System.Data.SqlClient を追加したいプロジェクトのノードをクリックして選択します。
選択状態で右クリックします。ポップアップメニューが表示されますので、メニューの[プロジェクト ファイルの編集]の項目をクリックします。
.csproj ファイルがエディタウィンドウに表示され、編集状態になります。
,csproj ファイルのXMLにItemGroup タグを記述し System.Data.SqlClinent アセンブリの参照を追加します。
変更前後の .csproj ファイルは次の通りです。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Data.SqlClient" Version="4.8.0" />
</ItemGroup>
</Project>
変更後 .csproj ファイルを保存し、プロジェクトを再度ビルドします。エラーが発生せずにビルドできることが確認できます。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Data.SqlClient" Version="4.6.0" />
</ItemGroup>
</Project>
SqlConnection を利用できるようになりましたので、プログラムを実装します。
下記のコードを記述します。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace SimpleExecSql
{
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
int count = -1;
endpoints.MapGet("/", async context =>
{
using (SqlConnection con = new SqlConnection(@"Data Source=[DBサーバーのホスト名 または IPアドレス];Initial Catalog=[接続するデータベース名];Connect Timeout=60;Persist Security Info=True;User ID=[DBの接続ユーザー名];Password=[DBの接続パスワード]")) {
con.Open();
SqlCommand com = new SqlCommand("select count (*) from ProductsA", con);
count = (int)com.ExecuteScalar();
con.Close();
}
context.Response.ContentType = "text/plain; charset=utf-8";
await context.Response.WriteAsync("レコード数:" + count.ToString());
});
});
}
}
}
データベースのテーブルは "ProductsA" の名前のテーブルを用意しています。
上記のWebアプリケーションを実行します。アプリケーションのルートURLにアクセスします。下図の結果が表示されます。
テーブルのレコード数がレスポンスの値として表示される動作が確認できます。