【ASP.NET開発】ASP.SQLServerに対するNETの汎用データベースアクセスクラス
10238 ワード
何というか、プログラマーとして、私たちは明日新しい知識を学ぶべきです.
以前、私はデータベースを操作するときに同じページでデータベースを操作していました.これにより、操作が煩雑になり、データベース操作のコードを繰り返し書く必要があり、多くの時間を浪費するだけでなく、コードが非常に乱れているように見えます.三層アーキテクチャに触れたという考え方から,階層化のメリット,また対象向けのメリットが分かった.今日本を読む时、周金橋先生のデータベースへのアクセスの共通クラスを見て、真似して1つ書いてみました.コードがはっきりしていて、しかも実用的で、データベースに対するすべてのよく使われる操作を含めています.
データベースにアクセスする汎用クラスを構築した後、データベースに従って操作する場合は、オブジェクトをインスタンス化し、必要に応じて適切なメソッドを呼び出すだけで、データベースに対するすべての操作を完了できます.これが、データベース・アクセス・レイヤとビジネス・ロジック・レイヤの分離のメリットです.
このように書かれたコードは、私たちのコードの複雑さを大幅に減らすことができます.また、煩雑さも大幅に低下しています.
以前、私はデータベースを操作するときに同じページでデータベースを操作していました.これにより、操作が煩雑になり、データベース操作のコードを繰り返し書く必要があり、多くの時間を浪費するだけでなく、コードが非常に乱れているように見えます.三層アーキテクチャに触れたという考え方から,階層化のメリット,また対象向けのメリットが分かった.今日本を読む时、周金橋先生のデータベースへのアクセスの共通クラスを見て、真似して1つ書いてみました.コードがはっきりしていて、しかも実用的で、データベースに対するすべてのよく使われる操作を含めています.
/// <summary>
///
/// </summary>
public class SqlHelper
{
private string connectionString;
/// <summary>
///
/// </summary>
public string ConnectionString
{
set { connectionString = value; }
}
/// <summary>
///
/// </summary>
/// <param name="connectionString"> </param>
public SqlHelper(string connectionString)
{
this.connectionString = connectionString;
}
/// <summary>
/// ,
/// </summary>
/// <param name="sql"> sql </param>
/// <param name="commandType"> , sql </param>
/// <returns> </returns>
public DataTable ExecuteDataTable(string sql,CommandType commandType)
{
return ExecuteDataTable(sql, commandType, null);
}
/// <summary>
/// ,
/// </summary>
/// <param name="sql"> sql </param>
/// <returns> </returns>
public DataTable ExecuteDataTable(string sql)
{
return ExecuteDataTable(sql, CommandType.Text, null);
}
/// <summary>
/// ,
/// </summary>
/// <param name="sql"> sql </param>
/// <param name="commandtype"> , sql </param>
/// <param name="parameters">Transact-SQL </param>
/// <returns></returns>
public DataTable ExecuteDataTable(string sql, CommandType commandtype, SqlParameter[] parameters)
{
DataTable data = new DataTable(); // datatable,
using (SqlConnection con = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.CommandType = commandtype;// command commandType Commandtype
// ,
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
}
// sql sqlcommand sqldataadapter
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(data);// datatable
}
}
return data;
}
/// <summary>
/// SqlDataReader
/// </summary>
/// <param name="sql"> SQl </param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string sql)
{
return ExecuteReader(sql, CommandType.Text, null);
}
/// <summary>
///
/// </summary>
/// <param name="sql"> sql </param>
/// <param name="commandType"> , SQl </param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string sql,CommandType commandType)
{
return ExecuteReader(sql, commandType, null);
}
/// <summary>
/// sqldatareader
/// </summary>
/// <param name="sql"></param>
/// <param name="commandType"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sql, con);
if (parameters != null)
{
foreach (SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameters);
}
}
con.Open();
//CommandBehavior.CloseConnection reader Connection
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
/// <summary>
/// , 。 ,
/// </summary>
/// <param name="sql"> SQl </param>
/// <returns></returns>
public Object ExecuteScalar(string sql)
{
return ExecuteScalar(sql, CommandType.Text, null);
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="commandType"></param>
/// <returns></returns>
public Object ExecuteScalar(string sql, CommandType commandType)
{
return ExecuteScalar(sql, commandType, null);
}
/// <summary>
///
/// </summary>
/// <param name="sql"></param>
/// <param name="commandType"> </param>
/// <param name="parameters"></param>
/// <returns></returns>
public Object ExecuteScalar(string sql,CommandType commandType, SqlParameter[] parameters)
{
Object result=null;
SqlConnection con=new SqlConnection(connectionString);
SqlCommand cmd=new SqlCommand(sql,con);
cmd.CommandType= commandType;
if(parameters!=null)
{
foreach (SqlParameter parapmeter in parameters)
{
cmd.Parameters.Add(parapmeter);
}
}
con.Open();
result=cmd.ExecuteScalar();
con.Close();
return result;
}
/// <summary>
///
/// </summary>
/// <param name="sql"> sql </param>
/// <returns></returns>
public int ExecuteNonQuery(string sql)
{
return ExecuteNonQuery(sql, CommandType.Text, null);
}
/// <summary>
///
/// </summary>
/// <param name="sql"> sql </param>
/// <param name="commandType"> , sql </param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, CommandType commandType)
{
return ExecuteNonQuery(sql, commandType, null);
}
/// <summary>
///
/// </summary>
/// <param name="sql"> sql </param>
/// <param name="commandType"> , sql </param>
/// <param name="parameters">Transact-SQL </param>
/// <returns></returns>
public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)
{
int count = 0;
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sql, con);
cmd.CommandType = commandType;
if (parameters != null)
{
foreach(SqlParameter parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
}
con.Open();
count = cmd.ExecuteNonQuery();
con.Close();
return count;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public DataTable GetTables()
{
DataTable table = null;
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
table = con.GetSchema("Tables");
}
return table;
}
}
データベースにアクセスする汎用クラスを構築した後、データベースに従って操作する場合は、オブジェクトをインスタンス化し、必要に応じて適切なメソッドを呼び出すだけで、データベースに対するすべての操作を完了できます.これが、データベース・アクセス・レイヤとビジネス・ロジック・レイヤの分離のメリットです.
このように書かれたコードは、私たちのコードの複雑さを大幅に減らすことができます.また、煩雑さも大幅に低下しています.