データベース操作系の処理を一つのクラスにまとめてみます。
DB処理の基本的な内容となります。
#サンプルコード
##データベース操作を管理するクラス(DBManager.cs)
DBManager.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApp01
{
/// <summary>
/// データベース操作を管理するクラス
/// </summary>
class DBManager
{
private SqlConnection sqlConnection;
private SqlTransaction sqlTransaction;
/// <summary>
/// コンストラクタ(DB接続)
/// <para name="dbServer">DBサーバ名</para>
/// <para name="dbName">DB名</para>
/// <para name="dbUser">ユーザ名</para>
/// <para name="dbPass">パスワード</para>
/// </summary>
public DBManager(string dbServer, string dbName, string dbUser, string dbPass)
{
// 接続文字列を生成
string connectString =
"Data Source = " + dbServer
+ ";Initial Catalog = " + dbName
+ ";User ID = " + dbUser
+ ";Password = " + dbPass
+ ";MultipleActiveResultSets=True";
// SqlConnection の新しいインスタンスを生成 (接続文字列を指定)
this.sqlConnection = new SqlConnection(connectString);
// データベース接続を開く
this.sqlConnection.Open();
}
/// <summary>
/// DB切断
/// </summary>
public void Close()
{
this.sqlConnection.Close();
this.sqlConnection.Dispose();
}
/// <summary>
/// トランザクション開始
/// </summary>
public void BeginTran()
{
this.sqlTransaction = this.sqlConnection.BeginTransaction();
}
/// <summary>
/// トランザクション コミット
/// </summary>
public void CommitTran()
{
if (this.sqlTransaction.Connection != null)
{
this.sqlTransaction.Commit();
this.sqlTransaction.Dispose();
}
}
/// <summary>
/// トランザクション ロールバック
/// </summary>
public void RollBack()
{
if (this.sqlTransaction.Connection != null)
{
this.sqlTransaction.Rollback();
this.sqlTransaction.Dispose();
}
}
/// <summary>
/// クエリー実行(OUTPUT項目あり)
/// <para name="query">SQL文</para>
/// <para name="paramDict">SQLパラメータ</para>
/// </summary>
public SqlDataReader ExecuteQuery(string query, Dictionary<string, Object> paramDict)
{
SqlCommand sqlCom = new SqlCommand();
//クエリー送信先、トランザクションの指定
sqlCom.Connection = this.sqlConnection;
sqlCom.Transaction = this.sqlTransaction;
sqlCom.CommandText = query;
foreach (KeyValuePair<string, Object> item in paramDict)
{
sqlCom.Parameters.Add(new SqlParameter(item.Key, item.Value));
}
// SQLを実行
SqlDataReader reader = sqlCom.ExecuteReader();
return reader;
}
/// <summary>
/// クエリー実行(OUTPUT項目あり)
/// <para name="query">SQL文</para>
/// </summary>
public SqlDataReader ExecuteQuery(string query)
{
return this.ExecuteQuery(query, new Dictionary<string, Object>());
}
/// <summary>
/// クエリー実行(OUTPUT項目なし)
/// <para name="query">SQL文</para>
/// <para name="paramDict">SQLパラメータ</para>
/// </summary>
public void ExecuteNonQuery(string query, Dictionary<string, Object> paramDict)
{
SqlCommand sqlCom = new SqlCommand();
//クエリー送信先、トランザクションの指定
sqlCom.Connection = this.sqlConnection;
sqlCom.Transaction = this.sqlTransaction;
sqlCom.CommandText = query;
foreach(KeyValuePair<string, Object> item in paramDict) {
sqlCom.Parameters.Add(new SqlParameter(item.Key, item.Value));
}
// SQLを実行
sqlCom.ExecuteNonQuery();
}
}
}
##使用例(SELECT編)
sample1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApp01
{
/// <summary>
/// 使用例(SELECT編)
/// </summary>
class Program
{
//データベース接続情報
private const string DATABASE_SERVER = "hogehoge";
private const string DATABASE_NAME = "honyararaDB";
private const string DATABASE_USER = "sa";
private const string DATABASE_PASSWORD = "naishowords";
/// <summary>
/// Mainメソッド
/// </summary>
public static void Main(string[] args)
{
DBManager dbmanager = new DBManager(DATABASE_SERVER, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
try
{
dbmanager.BeginTran();
string selectSql = @"SELECT * FROM fugagugaTable ";
SqlDataReader reader = dbmanager.ExecuteQuery(selectSql);
int uId_Or = reader.GetOrdinal("uId");
int uNm_Or = reader.GetOrdinal("uNm");
while (reader.Read())
{
Decimal uId = reader.GetDecimal(uId_Or);
string uNm = reader.GetString(uNm_Or);
Console.WriteLine("uId: {0}, uNm: {1}", uId, uNm);
}
dbmanager.CommitTran();
}
catch (SqlException sqle)
{
Console.WriteLine("Number: {0}, Message: {1}", sqle.Number, sqle.Message);
dbmanager.RollBack();
}
finally
{
dbmanager.Close();
}
}
}
}
##使用例(INSERT編(UPDATE/DELETEも同様))
sample2.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
namespace ConsoleApp01
{
/// <summary>
/// 使用例(INSERT編(UPDATE/DELETEも同様))
/// </summary>
class Program
{
//データベース接続情報
private const string DATABASE_SERVER = "hogehoge";
private const string DATABASE_NAME = "honyararaDB";
private const string DATABASE_USER = "sa";
private const string DATABASE_PASSWORD = "naishowords";
/// <summary>
/// Mainメソッド
/// </summary>
public static void Main(string[] args)
{
DBManager dbmanager = new DBManager(DATABASE_SERVER, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
try
{
dbmanager.BeginTran();
string insertSql = @"INSERT INTO fugagugaTable (COL_A, COL_B, COL_C) VALUES (@COL_A, @COL_B, @COL_C )";
Dictionary<String, Object> paramDict = new Dictionary<string, Object>();
paramDict.Add("@COL_A", "値あ");
paramDict.Add("@COL_B", "値い");
paramDict.Add("@COL_C", "値う");
dbmanager.ExecuteNonQuery(insertSql, paramDict);
dbmanager.CommitTran();
}
catch (SqlException sqle)
{
Console.WriteLine("Number: {0}, Message: {1}", sqle.Number, sqle.Message);
dbmanager.RollBack();
}
finally
{
dbmanager.Close();
}
}
}
}
以上です。