PDA

View Full Version : نظر در مورد قطعه کد زیر از لحاظ ساختار و کارایی



mf_007
یک شنبه 24 فروردین 1393, 13:45 عصر
سلام
آیا نوشتن کد به صورت زیر صحیح است ؟ چه ایرادهایی داره ؟ آیا اگر برای هر تیبل یه همچنین کلاسی بنویسیم برنامه با تعداد یوزر بالا به مشکل می خوره ؟

کلاس کانکشن

public class connection
{
public connection()
{
//
// TODO: Add constructor logic here
//
}
public static string connectionstring()
{
return ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
}
}


کلاس تیبل یوزر

public class user:IDisposable
{
public user()
{

}
public int inserttouser(string name,string family,string codemeli,string shomareshenasname,string tell,string mobile,string userid,int reserv_number)
{
int result = 0;
using (SqlConnection conn = new SqlConnection(connection.connectionstring()))
{
try
{
using (SqlCommand cmdinsert = new SqlCommand())
{
cmdinsert.Connection = conn;
cmdinsert.CommandType = CommandType.StoredProcedure;
cmdinsert.CommandText = "sp_tbluser_profile_Insert";
cmdinsert.Parameters.AddWithValue("@name",name);
cmdinsert.Parameters.AddWithValue("@family",family);
cmdinsert.Parameters.AddWithValue("@code_meli",codemeli);
cmdinsert.Parameters.AddWithValue("@shomareshenasname",shomareshenasname);
cmdinsert.Parameters.AddWithValue("@tell",tell);
cmdinsert.Parameters.AddWithValue("@mobile",mobile);
cmdinsert.Parameters.AddWithValue("@user_id",userid);
cmdinsert.Parameters.AddWithValue("@reserv_number",reserv_number);
conn.Open();
result = cmdinsert.ExecuteNonQuery();
conn.Close();
}
}
catch { }
finally { conn.Close(); }
}
return result;
}
public DataTable selectuser(string userid)
{
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection(connection.connectionstring()))
{
try
{
using (SqlCommand cmdselect = new SqlCommand())
{
cmdselect.CommandType = CommandType.StoredProcedure;
cmdselect.Connection = conn;
cmdselect.CommandText = "sp_tbluser_profile_SelectRow";
cmdselect.Parameters.AddWithValue("@user_id",userid);
conn.Open();
cmdselect.ExecuteNonQuery();
conn.Close();
SqlDataAdapter da = new SqlDataAdapter(cmdselect);
da.Fill(dt);
da.Dispose();
}
}
catch { }
finally { conn.Close(); }
}
return dt;
}
public int updateuser(string name, string family, string codemeli, string shomareshenasname, string tell, string mobile, string userid, int reserv_number)
{
int result = 0;
using (SqlConnection conn = new SqlConnection(connection.connectionstring()))
{
try
{
using (SqlCommand cmdinsert = new SqlCommand())
{
cmdinsert.Connection = conn;
cmdinsert.CommandType = CommandType.StoredProcedure;
cmdinsert.CommandText = "sp_tbluser_profile_Update";
cmdinsert.Parameters.AddWithValue("@name", name);
cmdinsert.Parameters.AddWithValue("@family", family);
cmdinsert.Parameters.AddWithValue("@code_meli", codemeli);
cmdinsert.Parameters.AddWithValue("@shomareshenasname", shomareshenasname);
cmdinsert.Parameters.AddWithValue("@tell", tell);
cmdinsert.Parameters.AddWithValue("@mobile", mobile);
cmdinsert.Parameters.AddWithValue("@user_id", userid);
cmdinsert.Parameters.AddWithValue("@reserv_number", reserv_number);
conn.Open();
result = cmdinsert.ExecuteNonQuery();
conn.Close();
}
}
catch { }
finally { conn.Close(); }
}
return result;
}
bool disposed;
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
//dispose managed ressources
}
}
//dispose unmanaged ressources
disposed = true;
}


public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

}

Mag-Mag
یک شنبه 24 فروردین 1393, 15:54 عصر
هیچ اشکالی نداره
کاملا هم صحیح است
بالاخره شما برای هر عملیات SQL یاید یکبار Connection بسازی ویکبار هم ببندیش.کار دیگه ای نمی شه کرد
ضمن اینکه از StorePOrocedure هم استفاده میکنی که سرعت رو میبره بالا
حالا مثلا فقط می مونه اهمیت نوع فیلد هات.
مثلا سرعت ذخیره در int خیلی بیشتر از varchar هست
همینطور در varchar ّیشتر از nvarchar
پس دقت کن برای هر فیلد همون نوعی رو که لازمه بگیری

mf_007
یک شنبه 24 فروردین 1393, 16:03 عصر
ممنون دوست عزیز از پاسخت .
تو یه پروژه به این صورت کار کردم ولی وقتی به یه برنامه نویس حرفه ای نشون دادم گفت که این نوع کد نویسی دانشجوییه و وقتی تعداد کاربران سایتت بره بالا سایت از کار می افته

Mag-Mag
یک شنبه 24 فروردین 1393, 16:28 عصر
منظورش این بوده که به حای اینکه همش کد های مربوط به اتصال به دیتا بیس و SqlCommand رو هی تکررار کنی به کلاس مثلا به اسم database بسازی و اونجا یکبار این کا رو بکنی
که اون وقت برای inserttouser به جای اون همه یک بار همه ی پارامتر ها رو در مثلا یک NameValueCollection اضافه می کنی و به همراه اسم جدول پاس می دی به تابع insert که در کلاس databse نوشتی و اونجا insert می کنی
این که کد تکراری در یک صفحه زیاد داشته باشی حرفه ای نیست
وگرنه همونطور که گفتم
برای هر عملیات SQL یاید یکبار Connection بسازی ویکبار هم ببندیش

حالا مثلا روش های مثل ajax هست که سرعت رو می بره بالا
ولی
تفاوت 2 تا برنامه نویس در ابنه که یکی یک برنامه رو با 200 خط مینویسه یکی با 20 خط

mf_007
یک شنبه 24 فروردین 1393, 20:37 عصر
اگر متدها به صورت static تعریف بشه بهتر نیست ؟

Mag-Mag
دوشنبه 25 فروردین 1393, 09:36 صبح
معمولا متد های insert,delete,update,changestatus و این قبیل چیزها به صورت استاتیک نوشته میشن