前回の記事では、LocalDBに作成したテーブルに対してSELECT文を実行する方法について紹介しました。
今回はLocalDBのテーブルに対して直接UPDATE・INSERT・DELETE文を実行するシンプルな方法を紹介します。
環境
- Windows10
- Visual Studio Community 2019
- .NET Framework 4.8
※実行前のテーブル内容

プログラムの全文
using System.Data.SqlClient;
namespace DBConnectApp
{
class Program
{
// 接続文字列
private static string connectionString = @"
Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=testdb;Integrated Security=True;
Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;
ApplicationIntent=ReadWrite;
MultiSubnetFailover=False";
static void Main(string[] args)
{
// Update文の実行
Update();
// Insert文の実行
Insert();
// Delete文の実行
Delete();
}
// Update文を実行するメソッド
public static void Update()
{
// IDが2のレコードのAgeを50に更新する
var updateQuery = "UPDATE Test SET Age = 50 WHERE Id = 2";
using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(updateQuery, connection))
{
connection.Open();
command.ExecuteNonQuery();
}
}
// Insert文を実行するメソッド
public static void Insert()
{
// パラメーターで中身を指定したレコードを追加
var insertQuery = @"INSERT INTO Test(Id, Name, Age, Birthday)
VALUES (@id, @name, @age, @birthday)";
var name = "Nancy";
var age = "28";
var birthday = "1993/5/5";
using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(insertQuery, connection))
{
connection.Open();
// パラメーターの追加
command.Parameters.AddWithValue("@id", 4);
command.Parameters.AddWithValue("@name", name);
command.Parameters.AddWithValue("@age", age);
command.Parameters.AddWithValue("@birthday", birthday);
command.ExecuteNonQuery();
}
}
// Delete文を実行するメソッド
public static void Delete()
{
// Idが3のレコードを削除
var deleteQuery = "DELETE FROM Test WHERE Id = 3";
using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(deleteQuery, connection))
{
connection.Open();
command.ExecuteNonQuery();
}
}
}
}
各処理ごとにメソッドを分けて、Mainメソッドから呼び出しています。
プログラムの解説
Update
public static void Update()
{
// IDが2のレコードのAgeを50に更新する
var updateQuery = "UPDATE Test SET Age = 50 WHERE Id = 2";
using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(updateQuery, connection))
{
connection.Open();
command.ExecuteNonQuery();
}
}
Update文を実行するメソッドです。
SqlCommandクラスの第1引数(cmdText)に実行するクエリを渡して、ExecuteNonQueryメソッドを呼び出すことでSQLが実行されます。
ExecuteNonQueryメソッドはUpdate・Insert・Deleteなど更新系の時に使うものです。
戻り値として、SQL実行により影響を受けた行の数が得られます。
Updateメソッドを実行すると、Idが2のレコードのAgeが更新されました。
※左上の更新矢印ボタンを押すと画面が更新されます。

Insert
public static void Insert()
{
// パラメーターで中身を指定したレコードを追加
var insertQuery = @"INSERT INTO Test(Id, Name, Age, Birthday)
VALUES (@id, @name, @age, @birthday)";
var name = "Nancy";
var age = "28";
var birthday = "1993/5/5";
using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(insertQuery, connection))
{
connection.Open();
// パラメーターの追加
command.Parameters.AddWithValue("@id", 4);
command.Parameters.AddWithValue("@name", name);
command.Parameters.AddWithValue("@age", age);
command.Parameters.AddWithValue("@birthday", birthday);
command.ExecuteNonQuery();
}
}
Updateと基本的な構文は同じですが、SQL文の中に「@~」が含まれています。
これはパラメータクエリと呼ばれるもので、SQLインジェクション対策に用いられます。
command.Parameters.AddWithValue(“@パラメータ名”, 代入する値)と書くことでパラメータに値が代入されます。
今回はIdは直接指定し、それ以外を変数で指定しています。
Insertメソッドを実行してみると、Idが4となるレコードが追加されます。
各データもパラメーターの内容と一致していることがわかります。

Delete
public static void Delete()
{
// Idが3のレコードを削除
var deleteQuery = "DELETE FROM Test WHERE Id = 3";
using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(deleteQuery, connection))
{
connection.Open();
command.ExecuteNonQuery();
}
}
これはシンプルですね。SQL文の中身以外はUpdateやInsertと同じ構文です。
実行してみると、Idが3のレコードが削除されました。

以上、SQLを直接実行してレコードの更新・挿入・削除を行う方法の紹介でした。
コンソールアプリではなく、ASP.NET Core MVCアプリ上でSqlClientを用いたDB操作を行う方法については以下の記事をご参照ください。
【参考書籍】
コメント