PDA

View Full Version : سوال: مشکل در جمع مقادیر یک فیلد از دیتابیس



jboloori
سه شنبه 29 اردیبهشت 1394, 22:44 عصر
سلام دوستان
توی پروژم به مشکل خوردم.

فرض کنید یه جدول به نام tblDaramadha دارم و اسم فیلدهای مورد نظرم daramad , tarikh هستند.
یه لیبل دارم که میخوام مجموع درآمد مثلا بین 1394/01/01 و 1393/01/31 رو حساب کنه و در نهایت داخل لیبل نمایش بده.(البته بدون وجود گرید ویو).

ممنون میشم کامل راهنماییم کنید.

سپاس

Mousavmousab
چهارشنبه 30 اردیبهشت 1394, 01:31 صبح
خوب الان کد SQL می خوای ، چی می خوای؟

ghasem110deh
چهارشنبه 30 اردیبهشت 1394, 07:32 صبح
سلام
چون نمیخوای از دیتاگریدویو استفاده کنی ...
بنظرم اول باس توی دیتاتیبل فیلتر رو انجام بدی (بین دو تا تاریخ) بعد ستون رو جمع کنی :

SELECT SUM(daramad) AS Majmo FROM tblDaramadha;

واسه تاریخ هم که select دیگه (بین تاریخ یک و دو)

ebrahim.rayatparvar
چهارشنبه 30 اردیبهشت 1394, 09:54 صبح
سلام دوستان.
کدی که دوست خوبمون ghasem110deh (http://barnamenevis.org/member.php?330388-ghasem110deh) داده درسته ولی فکر نکنم نیاز به یه select دیگه برای تاریخ باشه فقط آخر همین select با where و BETWEEN یه شرط برای تاریخ بزاری کافیه.

winner1
چهارشنبه 30 اردیبهشت 1394, 11:36 صبح
با متد Sum که دوستمون گفتن و شرط تاریخ که میزارین با Where و between
مثال :

SELECT SUM(ColumnName) FROM [TABLE_Name] WHERE [Date_Column_Name] BETWEEN date1 AND date2

jboloori
چهارشنبه 30 اردیبهشت 1394, 12:27 عصر
بابت راهنمایی هاتون ممنونم ولی بازم نتونستم به نتیجه برسم.اینم کدی که نوشتم.(البته داخل تابع)



string mah2;//, rooz, tDay;
if (PC.GetMonth(DateTime.Now) < 10)
mah2 = "0" + PC.GetMonth(DateTime.Now).ToString();
else
mah2 = PC.GetMonth(DateTime.Now).ToString();
//if (PC.GetDayOfMonth(DateTime.Now) < 10)
// rooz = "0" + PC.GetDayOfMonth(DateTime.Now).ToString();
//else
// rooz = PC.GetDayOfMonth(DateTime.Now).ToString();
//tDay = PC.GetYear(DateTime.Now).ToString() + "/" + mah2 + "/" + rooz;


con.ConnectionString = Properties.Settings.Default.DataBaseConString;


cmd.Connection = con;


cmd.CommandType = CommandType.Text;
// cmd.CommandText = "select * from tbldaramadha";


con.Open();


cmd.CommandText = "Select count(*) from tblDaramadha where tarikh BETWEEN ? AND ?";
cmd.Parameters.AddWithValue("p1", (PC.GetYear(DateTime.Now).ToString()+"/"+mah2+"/"+"01"));
cmd.Parameters.AddWithValue("p1", (PC.GetYear(DateTime.Now).ToString() + "/" + mah2 + "/" + "31"));
int m = Convert.ToInt32(cmd.ExecuteScalar());
cmd.Parameters.Clear();
if (m >= 1)
{
cmd.CommandText = "SELECT SUM(daramad) FROM tblDaramadha WHERE tarikh BETWEEN ? AND ?";
cmd.Parameters.AddWithValue("p1", (PC.GetYear(DateTime.Now).ToString() + "/" + mah2 + "/" + "01"));
cmd.Parameters.AddWithValue("p1", (PC.GetYear(DateTime.Now).ToString() + "/" + mah2 + "/" + "31"));

OleDbDataReader dr = cmd.ExecuteReader();
//string emdaramad = Convert.ToString(cmd.ExecuteScalar());
cmd.Parameters.Clear();
while (dr.Read())
{
label8.Text = dr["daramad"].ToString() + " تومان";
}
}
else
{
label8.Text = "ثبت نشده";
}
con.Close();

ebrahim.rayatparvar
چهارشنبه 30 اردیبهشت 1394, 12:59 عصر
تاریخ رو طرف کد sql به صورت میلادی تبدیل کن بفرست ببین درست میشه.

winner1
چهارشنبه 30 اردیبهشت 1394, 12:59 عصر
خطا یا مشکلی که پیش میاد چیه دقیقا ؟

jboloori
چهارشنبه 30 اردیبهشت 1394, 20:07 عصر
خطاش اینه :



An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll


Additional information: daramad

winner1
چهارشنبه 30 اردیبهشت 1394, 22:29 عصر
خطاش اینه :



An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll



Additional information: daramad

مشکلتون اینجاست SUM(daramad) AS daramad باید به خروجی sum با as یه اسم بدین چون ستونی به اسم درامد نبود دیتا ریدر استثنا میداد با دستور as درامد رو تعریف کن اینم مثال :

SELECT SUM(daramad) AS daramad

jboloori
چهارشنبه 30 اردیبهشت 1394, 22:37 عصر
خیلی ممنون از لطفتون به جواب رسیدم
بزرگواری کردید