PDA

View Full Version : جمع مقادیر یک ستون از نوع nvarchar(50)



vahid.kh
سه شنبه 26 اردیبهشت 1391, 12:53 عصر
سلام
ستون مبلغ رو در جدولم nvarchar تعریف کردم.حالا این کد رو مینویسم اشکال میگیره که

Operand data type nvarchar is invalid for sum operator.
راست میگه خوب اونا رشته هستند.چطور جمع بشوند.و جمع کل عدد ها رو نشو ن بده.



select sum (amount )
from dbo.TblAdmission inner join dbo.TblMount on dbo.TblAdmission.Mid =dbo.TblMount.Mid
where dbo.TblMount.Mid =1


مقادیر توی ستون amount عدد هستند.میخواهم جمع اونارو در یک lable نشون بدم.اما اونا رو رشته تعریف کردم .چطور جمع می شوند.
با تشکر.

حمیدرضاصادقیان
سه شنبه 26 اردیبهشت 1391, 14:23 عصر
سلام

select sum (cast(amount AS DECIMAL(20,2))) AS SumAmount
from dbo.TblAdmission inner join dbo.TblMount on dbo.TblAdmission.Mid =dbo.TblMount.Mid
where dbo.TblMount.Mid =1

vahid.kh
سه شنبه 26 اردیبهشت 1391, 17:06 عصر
'sum' is not a recognized built-in function name.

این error رو میده.جمع در تابع ساخته شده به رسمیت شناخته نشده.

vahid.kh
سه شنبه 26 اردیبهشت 1391, 17:16 عصر
mydbdll.mydb db= new mydbdll.mydb();
Admission adm = new Admission ();

switch (Class1.month_shamsi)
بر اساس یکی از این ما هها
{
case 1:
m_n =" 1"; break;
case 2:
m_n = " 5 "; break;
case 3:
m_n = " 6 "; break;
case 4:
m_n = " 7 "; break;
case 5:
m_n = " 8 "; break;
case 6:
m_n = " 9 "; break;
case 7:
m_n = " 10 "; break;
case 8:
m_n = " 11 "; break;
case 9:
m_n = " 12 "; break;
case 10:
m_n = " 13 "; break;
case 11:
m_n = " 14 "; break;
case 12:
m_n = " 15 "; break;
}
string thismount;
thismount = m_n;
در لایه admission در متغیر mount مقدار یکی از ماهها ی بالا قرار میگیرد.
adm.mount =Int32.Parse (thismount) ;
DataTable dt=new DataTable ();
صدا زدن لایه adm که کدش رو پایین آوردم.
dt=adm.Totalinmont();
که این لیبل بعد از اجرای مراحل زیر جمع رو نشون بده
LblTotalIncomeInMont.Text = dt.ToString();


بعد این لایه اجرا میشه. لایه admission

public int mount;
public DataTable Totalinmont()
{
DataTable dt = new DataTable();
string sql="select sum (amount ) from dbo.TblAdmission inner join dbo.TblMount on dbo.TblAdmission.Mid =dbo.TblMount.Mid where dbo.TblMount.Mid ={0}";
sql=string .Format (sql ,this .mount );
صدا زدن لایه دیتا بیس برای اجرای دستورات.در پایین این مجموعه کد.
db.connect ();
if(db.lasterror =="")
{
db.select (sql);
if(db .lasterror =="")
{
db.disconnect ();
}
}
lasterror =db.lasterror ;
return dt;
}

سپس این لایه مربوط به کلاس mydb که دیتا تیبل رو پر کنه و برگردونه به لایه بالا.

public DataTable select(string sql)
{
DataTable dt=new DataTable ();
try {
cmd.CommandText = sql;
da.Fill(dt);
}
catch(Exception ex)
{
if(!showfriendlymessage )
lasterror =ex.Message ;
else
lasterror +="خطا در خواندن اطلاعات .";
}
return dt;
}

می خواهم جمع مبلغ ماهانه رو در lable نشون بده.
کد sql در نرم افزار sql که اجرا میکنم جمع رو میده.ولی در .net هیچی بر نمیگردونه.datatable خالی بر میگرده.اصلا باید از دیتا تیبل استفاده بشه یا نه؟ممنون
در ضمن نوع جدول رو به bigint تغیر دادم.و از همون sum خالی استفاده کردم.

حمیدرضاصادقیان
سه شنبه 26 اردیبهشت 1391, 17:29 عصر
اصلاح شد. یک پرانتز کم گذاشته بودم!