PDA

View Full Version : مشکل در برگشت اطلاعات یک جدول از دیتابیس در معماری سه لایه



soleimani.em
شنبه 31 خرداد 1393, 09:54 صبح
با سلام خدمت دوستان برنامه نویس گل!


مشکلی که من بهش برخوردم اینه که تو یه پروژه نیاز هست تعدادی یا همه اطلاعات یه جدول رو تو یه فرم لود کنم مثلاً من میخوام اطلاعات کاربری که User اون رو دارم مانند اسم و تاریخ ثبت و ... بگیرم و ازشون استفاده کنم به روش سنتی که کار میکردم به این شکل

SqlConnection ObjectConnection = new SqlConnection(Connect.ConnecttoSQL);
ObjectConnection.Open();
SqlCommand ObjectCommand = new SqlCommand("select * from UserAccount where UserName=('" + tUserName.Text + "')");
ObjectCommand.Connection = ObjectConnection;
SqlDataReader Objectreader = ObjectCommand.ExecuteReader();
while (Objectreader.Read())
{
//and =('" + tPassword.Text + "')
Userinfo.UserID = Convert.ToInt32(Objectreader.GetValue(0).ToString( ));
Userinfo.Name = Objectreader.GetValue(1).ToString();
Userinfo.Family = Objectreader.GetValue(2).ToString();
}
Objectreader.Close();
ObjectConnection.Dispose();


ولی من الان رو پروژه ای با معماری سه لایه کار می کنم که تو لایه DAL


public object ExecuteScaler(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new _Connections().Cnn;
cmd.CommandType = commandType;
cmd.CommandText = commandText;
cmd.Parameters.AddRange(commandParameters);
object retVal = cmd.ExecuteScalar();
return retVal;
}

public string GetUseraname_Login(string UserName)
{
object retVal = ExecuteScaler(System.Data.CommandType.Text, "SELECT Name_Family,UseriD FROM UserControl WHERE UserName = @UserName ", new SqlParameter[] { new SqlParameter("@UserName", UserName) });
if (retVal != null)
return retVal + "";
else
return "";
}

و لایه BLL


public string GetUseranamePassword_Login()
{
string retval = "";
retval = Log.GetUseranamePassword_Login(UserName);
return retval;
}


کدهامو نوشتم حالا من چطوری میتونم دسترسی به مقدار فیلد Name_Family یا UseriD داشته باشم البته بصورت تکی مثلا بخوام فقط Name_Family رو بگیرم مشکلی نیست با بیشتر از یکی مشکل دارم.

لطفاً راهمایی کنید که راهش چیه نمیخوام از دیتا گرید استفاده کنم برای جاهایی که نیاز به دیتا گرید بوده Data set استفاده کردم بنظر من میشه از همون استفاده کرد ولی من راهشو بلد نیستم یعنی نمیدونم باید با چه شی من از اطلاعات Data set اسفاده کنم.

با تشکر.

plus
شنبه 31 خرداد 1393, 12:13 عصر
شما میتونی خروجی متد در لایه DAL رو از نوع DataTable بگیری و بجای ExecuteScalar از DataAdapter برای پر کردن DataTable استفاده کنید.در این حالت، در لایه BL شما بجای یک رشته، یک DataTable (یا DataRow) از لایه DAL n دریافت میکنید و میتونید به مقادیر ستون های مختلف دسترسی پیدا کنید.

soleimani.em
شنبه 31 خرداد 1393, 13:11 عصر
لایه DAL رو اینطوری نوشتم

public DataSet ExecuteDataset(CommandType commandType, string commandText, SqlParameter[] commandParameters)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new _Connections().Cnn;
cmd.CommandType = commandType;
cmd.CommandText = commandText;
if (commandParameters != null)
cmd.Parameters.AddRange(commandParameters);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
return ds;
}

public DataTable GetUpdate_City()
{
DataSet ds = ExecuteDataset(System.Data.CommandType.Text, "SELECT Userid, Name_Family, FROM UserControl Where Username=@username ", new SqlParameter[] { new SqlParameter("@DRiD", DRiD) });
return ds.Tables[0];
}

حالا من میخوام به داده های دیتا تیبل دسترسی داشته باشم. اینو چطوری تو لایه BLL انجام بدم؟
و تو لایه UI چطوری میشه استفاده کرد؟
بازم ممنون از راهنماییتون.

plus
شنبه 31 خرداد 1393, 13:19 عصر
خوب با فراخوانی متدهایی که نوشتین خروجی از نوع DataSet و DataTable به لایه BL داده میشه...نمیفهمم ابهامش کجاس.
در لایه UI هم بستگی به طراحی داره...یک روش اینه که DataTable رو هم از BL به UI بدین..روش های مختلفی برای طراحی چند لایه وجود داره.

soleimani.em
شنبه 31 خرداد 1393, 13:26 عصر
خوب با فراخوانی متدهایی که نوشتین خروجی از نوع DataSet و DataTable به لایه BL داده میشه...نمیفهمم ابهامش کجاس.
در لایه UI هم بستگی به طراحی داره...یک روش اینه که DataTable رو هم از BL به UI بدین..روش های مختلفی برای طراحی چند لایه وجود داره.


من چطوری می تونم به اطلاعات دیتا تیبل دسترسی داشته باشم. اینجاشو مشکل دارم. اگه دیتا گرید داشتم مقدار دیتا گرید رو با خروجی کد بالا پر می کردم و لی الان که دیتا گرید ندارم نمیدونم چطوری باید به مقدار ها دسترسی پیدا کنم.

plus
شنبه 31 خرداد 1393, 13:32 عصر
DataTable یک جدول داده هست. با استفاده از اندیس و یا نام سطر و ستون میتونید مقدار اون سطر و ستون رو بدست بیارین.
http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx

soleimani.em
شنبه 31 خرداد 1393, 13:48 عصر
DataTable یک جدول داده هست. با استفاده از اندیس و یا نام سطر و ستون میتونید مقدار اون سطر و ستون رو بدست بیارین.
http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx

خیلی ممنون مشکلم حل شد. دستت شما درد نکنه جناب Plus