データベースアクセスクラス
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Text.RegularExpressions;
namespace LibrarySample
{
<summary>
</summary>
public class DbAccess : IDisposable
{
#region 変数
<summary>
</summary>
private SqlConnection connection = null;
<summary>
</summary>
private SqlTransaction transaction = null;
<summary>
</summary>
private string connectionString = string.Empty;
<summary>
</summary>
private string serverName = string.Empty;
<summary>
</summary>
private string databaseName = string.Empty;
<summary>
</summary>
private string userId = string.Empty;
<summary>
</summary>
private string password = string.Empty;
<summary>
</summary>
private int connectionTimeout = 600;
<summary>
</summary>
private int commandTimeout = 60;
<summary>
</summary>
private string quearyString = string.Empty;
<summary>
</summary>
private List<SqlParameter> sqlParameters = new List<SqlParameter>();
#endregion
#region プロパティ
<summary>
</summary>
public SqlConnection Connection
{
get
{
return this.connection;
}
}
<summary>
</summary>
public string QuearyString
{
get
{
return this.quearyString;
}
set
{
this.quearyString = value;
}
}
<summary>
</summary>
public int CommandTimeout
{
get
{
return this.commandTimeout;
}
set
{
this.commandTimeout = value;
}
}
#endregion
#region コンストラクタ
<summary>
</summary>
public DbAccess()
{
TODO
this.serverName = @"SUZUKI-XP\SQLEXPRESS";
this.databaseName = "TEST_DB";
this.userId = "sa";
this.password = "sa";
this.connectionTimeout = 600;
this.commandTimeout = 60;
this.connectionString = this.CreateConnectionString(this.serverName, this.databaseName,
this.userId, this.password, this.connectionTimeout);
}
#endregion
#region 接続文字列を生成する
<summary>
</summary>
<param name="serverName"></param>
<param name="databaseName"></param>
<param name="userId"></param>
<param name="password"></param>
<param name="connectTimeout"></param>
<returns>
</returns>
private string CreateConnectionString(string serverName, string databaseName, string userId, string password, int connectTimeout)
{
return string.Format(@"Data Source={0};Initial Catalog={1};Persist Security Info=false;User ID={2};Password={3};Connect Timeout={4}",
serverName, databaseName, userId, password, connectionTimeout);
}
#endregion
#region DBに接続する
<summary>
</summary>
public void Connect()
{
this.connection = new SqlConnection();
this.connection.ConnectionString = this.connectionString;
this.connection.Open();
}
#endregion
#region DBを切断する
<summary>
</summary>
public void Close()
{
if (this.connection != null)
{
if (ConnectionState.Open == this.connection.State)
{
this.connection.Close();
this.connection.Dispose();
this.connection = null;
}
}
}
#endregion
#region SqlParameterを登録する
<summary>
</summary>
<param name="parameter"></param>
public void SetSqlParameter(SqlParameter parameter)
{
this.sqlParameters.Add(parameter);
}
#endregion
#region SqlParameterをクリアする
<summary>
</summary>
public void ClearSqlParameter()
{
this.sqlParameters.Clear();
}
#endregion
#region 参照系SQLを実行する
<summary>
</summary>
<returns>
</returns>
public DataTable ExecuteQuery()
{
return this.ExecuteQuery(string.Empty);
}
#endregion
#region 参照系SQLを実行する
<summary>
</summary>
<param name="tableName"></param>
<returns>
</returns>
public DataTable ExecuteQuery(string tableName)
{
using (SqlDataAdapter adapter = new SqlDataAdapter(this.QuearyString, this.connection))
{
adapter.SelectCommand.CommandTimeout = this.commandTimeout;
adapter.SelectCommand.Parameters.AddRange(this.sqlParameters.ToArray());
adapter.SelectCommand.Transaction = this.transaction;
DataSet ds = new DataSet();
if (!string.IsNullOrEmpty(tableName))
{
adapter.Fill(ds, tableName);
}
else
{
adapter.Fill(ds);
}
if (ds.Tables[0] != null)
{
return ds.Tables[0];
}
else
{
return null;
}
}
}
#endregion
#region 更新系SQLを実行する
<summary>
</summary>
<returns>
</returns>
public int ExecuteNonQuery()
{
using (SqlCommand cmd = new SqlCommand(this.quearyString, this.connection))
{
cmd.CommandTimeout = this.commandTimeout;
cmd.Transaction = this.transaction;
cmd.Parameters.AddRange(this.sqlParameters.ToArray());
return cmd.ExecuteNonQuery();
}
}
#endregion
#region 単一の値を取得を実行する
<summary>
</summary>
<returns>
</returns>
public T ExecuteScalar<T>()
{
using (SqlCommand cmd = new SqlCommand(this.quearyString, this.connection))
{
cmd.CommandTimeout = this.commandTimeout;
cmd.Transaction = this.transaction;
cmd.Parameters.AddRange(this.sqlParameters.ToArray());
return (T)(cmd.ExecuteScalar());
}
}
#endregion
#region トランザクション開始を実行する
<summary>
</summary>
public void BeginTransaction()
{
if (this.connection != null)
{
if (this.transaction != null)
{
this.transaction.Dispose();
this.transaction = null;
}
this.transaction = this.connection.BeginTransaction();
}
}
#endregion
#region コミットを実行する
<summary>
</summary>
public void Commit()
{
if (this.transaction != null)
{
this.transaction.Commit();
this.transaction.Dispose();
this.transaction = null;
}
}
#endregion
#region ロールバックを実行する
<summary>
</summary>
public void Rollback()
{
if (this.transaction != null)
{
this.transaction.Rollback();
this.transaction.Dispose();
this.transaction = null;
}
}
#endregion
#region Disposeを実行する
<summary>
</summary>
public void Dispose()
{
this.Rollback();
this.Close();
}
#endregion
#region Like用文字列エスケープ処理
<summary>
</summary>
<param name="likeString"></param>
<returns></returns>
public static string EscapeLikeString(string likeString)
{
if (string.IsNullOrEmpty(likeString))
{
return string.Empty;
}
return Regex.Replace(likeString, @"([\%_\[])", "[$1]");
}
#endregion
TODO
#region SqlDataReader用の処理
#region イベント
<summary>
</summary>
public event Func<SqlDataReader, object> SqlDataReaderEventHandler;
#endregion
#region 参照系SQLを実行する(SqlDataReaderを使用)
<summary>
</summary>
<returns></returns>
public object ExecuteQueryForSqlDataReader()
{
object obj = null;
using (SqlCommand cmd = new SqlCommand(this.quearyString, this.connection))
{
cmd.CommandTimeout = this.commandTimeout;
using (SqlDataReader reader = cmd.ExecuteReader())
{
obj = this.SqlDataReaderEventHandler(reader);
}
}
return obj;
}
#endregion
#endregion
}
}
using (DbAccess dba = new DbAccess())
{
dba.Connect();
dba.ClearSqlParameter();
dba.QuearyString = "SELECT ID,NAME FROM T_USER WHERE COMMENT LIKE '%'+ @P_COMMENT + '%'";
SqlParameter param = new SqlParameter("@P_COMMENT", SqlDbType.VarChar);
param.Value = DbAccess.EscapeLikeString("い");
dba.SetSqlParameter(param);
DataTable dt = dba.ExecuteQuery();
string data= "";
foreach (DataRow dr in dt.Rows)
{
data += dr[0].ToString() + " - " + dr[1].ToString() + Environment.NewLine;
}
Console.WriteLine(data);
Console.ReadLine();
}