PDA

View Full Version : سوال: نحوه اجرای procedure در asp.net با معماری سه لایه



rezaeti
پنج شنبه 04 آبان 1396, 17:49 عصر
سلام دوستان من یک پروزه asp.net دارم با معماری سه لایه . که برای دستورات درج و حذف و انتخاب و جستجوی داده ها از کلاس sqlDBHelper استفاده میکنم. همه چیز خوبه و درست کار میکنه ولی برای اجرای یک procedure که کارش درج یا حذف یا جستجو نیست بلکه جمع کردن مقدار یک ستون از جدولم هست با مشکل برخوردم نمیدونم مشکل در کلاس sqlDBHelper هست یا لایه DAL یا چیز دیگه است. کد ها رو این طوری نوشتم.جدولم چهار تا ستون داره.
procedure من این طوری هست:

ALTER PROCEDURE [dbo].[GetSum]
(@ID_sh int)
AS
SELECT ID_sh, SUM(price_column)
FROM tbl_mytable
WHERE @ID_sh = ID_sh
GROUP BY ID_sh
RETURN
و کلاس موجودیت :

public class Payment
{
private int _ID_sh;
public int ID_sh
{
get { return _ID_sh; }
set { _ID_sh = value; }
}

private decimal _price_column;
public decimal price_column
{
get { return _price_column; }
set { _price_column = value; }
}

private string _name;
public string name
{
get { return _name; }
set { _name = value; }
}

private string _family;
public string family
{
get { return _family; }
set { _family = value; }
}
}
و کلاس DAL

public List<Payment> GetSum(string id_sh)
{
List<Payment> Pay= null;
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("@ID_sh",id_sh)

};
using (DataTable table = SqlDBHelper.ExecuteSelectParameterCommand("GetSum", CommandType.StoredProcedure, param))
{

if (table.Rows.Count > 0)
{
PaymentList= new List<Payment>();
foreach (DataRow row in table.Rows)
{
Payment Pay = new Payment ();


PaymentList.Add(Pay );
}
}
else
{
return PaymentList;
}
}
return PaymentList;
}
و کلاس BLL

public List<Payment> GetSum(string id_sh)
{
return PaymentDB.GetSum(shp);
}


و حالا من روی رویداد کلیک دکمه این کد رو نوشتم:

protected void btn_ShowSum_Click(object sender, ImageClickEventArgs e)
{
DAL.Payment pay = new DAL.Payment ();
shp = lbl_kod.Text + txt_sh.Text;
pay.ID_sh = shp;

PaymentDB.GetSum(pay.ID_sh);
txtShowSum.Text = pay.price_column.ToString();
}
مشکل این جاست که وقتی کد های زیر رو اضافه میکنم به کلاس DAL

pay.ID_sh = Convert.ToInt32(row["ID_sh"]);
pay.price_column = Convert.Todecimal(row["price_column"]);
خطا میده که ستون price_column متعلق به جدول نیست و وقتی که حذف میکنمشون مقدار سه ستون صفر میشه و فقط مقدار ستون ID_sh برار مقدار تکست باکسه
و در هر صورت کد اجرا نمیشه ممنون مشم کمکم کنید

Mahmoud.Afrad
یک شنبه 07 آبان 1396, 20:59 عصر
برای ستون جمع اسمی تعیین نکردید پس یک نام مستعار اضافه کنید
SELECT ID_sh, SUM(price_column) as price_columnFROM tbl_mytable


در ضمن از لایه UI یعنی در رویداد button نباید به لایه DAL دسترسی داشته باشید.