PDA

View Full Version : یک نمونه data access layer



e-shahshahani
چهارشنبه 07 فروردین 1387, 14:44 عصر
من این لایه را نوشتم و ازش توی چندین پروژه استفاده کردم، (مثلا http://rssnews.ir):
اگر لطف کنید و نظرتان را بگویید ممنون میشم. مثلا نقاط قوت، نقاط ضعف و پیشنهادات :لبخندساده:


using System.Configuration;
using System.Data;
using System.Data.SqlClient;

public class BasicDataAccess
{
public static string GetConnectionString(string csName)
{
return ConfigurationManager.ConnectionStrings["cs"].ConnectionString;
}

public static SqlCommand CreateCommand(string storedProcedureName)
{
SqlCommand cmd = new SqlCommand(storedProcedureName);
cmd.CommandType = CommandType.StoredProcedure;
return cmd;
}

public static SqlCommand CreateTextCommand(string commandText)
{
SqlCommand cmd = new SqlCommand(commandText);
cmd.CommandType = CommandType.Text;
return cmd;
}

public static DataSet ExecuteDataSet(SqlCommand command)
{
using (SqlConnection cnx = new SqlConnection(GetConnectionString("cs")))
{
command.Connection = cnx;
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds;
}
}
}

public static DataTable ExecuteDataTable(SqlCommand command)
{
using (SqlConnection cnx = new SqlConnection(GetConnectionString("cs")))
{
command.Connection = cnx;
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
}

public static int ExecuteNonQuery(SqlCommand command)
{
using (SqlConnection cnx = new SqlConnection(GetConnectionString("cs")))
{
command.Connection = cnx;
cnx.Open();
return command.ExecuteNonQuery();
}
}

public static int ExecuteNonQuery(string dynamicSql)
{
using (SqlCommand cmd = CreateCommand("ExecuteDynamicSql"))
{
cmd.Parameters.Add("@sql", SqlDbType.NVarChar, 4000).Value = dynamicSql;
return ExecuteNonQuery(cmd);
}
}

public static object ExecuteScalar(SqlCommand command)
{
using (SqlConnection cnx = new SqlConnection(GetConnectionString("cs")))
{
command.Connection = cnx;
cnx.Open();
return command.ExecuteScalar();
}
}

public static object ExecuteScalar(string dynamicSql)
{
using (SqlCommand cmd = CreateCommand("ExecuteDynamicSql"))
{
cmd.Parameters.Add("@sql", SqlDbType.NVarChar, 4000).Value = dynamicSql;
return ExecuteScalar(cmd);
}
}

public static DataTable ExecuteDataTable(SqlCommand command, string connectionStringName)
{
using (SqlConnection cnx = new SqlConnection(GetConnectionString(connectionString Name)))
{
command.Connection = cnx;
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
DataTable dt = new DataTable();
adapter.Fill(dt);
return dt;
}
}
}
public static DataTable ExecuteDataTable(string dynamicSql)
{
using (SqlCommand cmd = CreateCommand("ExecuteDynamicSql"))
{
cmd.Parameters.Add("@sql", SqlDbType.NVarChar, 4000).Value = dynamicSql;
return ExecuteDataTable(cmd);
}
}

public static DataSet ExecuteDataSet(SqlCommand command, string connectionStringName)
{
using (SqlConnection cnx = new SqlConnection(GetConnectionString(connectionString Name)))
{
command.Connection = cnx;
using (SqlDataAdapter adapter = new SqlDataAdapter(command))
{
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds;
}
}
}

public static int ExecuteNonQuery(SqlCommand command, string connectionStringName)
{
using (SqlConnection cnx = new SqlConnection(GetConnectionString(connectionString Name)))
{
command.Connection = cnx;
cnx.Open();
return command.ExecuteNonQuery();
}
}

public static object ExecuteScalar(SqlCommand command, string connectionStringName)
{
using (SqlConnection cnx = new SqlConnection(GetConnectionString(connectionString Name)))
{
command.Connection = cnx;
cnx.Open();
return command.ExecuteScalar();
}
}
}

Behrouz_Rad
چهارشنبه 07 فروردین 1387, 18:21 عصر
1) تابع GetConnectionString رو باید در یک کلاس مجزا قرار بدی و کلاس DAL رو از اون مشتق کنی. بهتره GetConnectionString رو در یک Interface پیاده سازی کنی.
2) ساختار کنترل خطا رو فراموش نکن.
3) سازنده رو از کلاس حذف نکن. چون کلاست تنها شامل اعضای static هست، سازنده رو private در نظر بگیر تا کسی نتونه از اون new کنه.
4) ممکنه SP ی من به تعداد نامشخصی پارامتردار باشه. امکان گرفتن پارامتر رو برای Command فراهم کن.
5) سوالات عمومی حوزه ی دات نت رو در بخش های VB.NET یا #C مطرح بفرمایید.

موفق باشید.

miladr
چهارشنبه 07 فروردین 1387, 22:35 عصر
البته ببخشید من نظر میدم
اما این DAL چون کلی هست فکر می کنم یکی از هدف های اصلی DAL که ساده سازی تغییرات هست رو محقق نمی کنه