PDA

View Full Version : ارتباط لیبل با بانک یا دیتا تیبل.



vahid.kh
چهارشنبه 27 اردیبهشت 1391, 12:06 عصر
می خواهم جمع مبلغ ماهانه رو در lable نشون بده.
کد sql در نرم افزار sql که اجرا میکنم جمع رو میده.ولی در .net هیچی بر نمیگردونه.datatable خالی بر میگرده.اصلا باید از دیتا تیبل استفاده بشه یا نه؟


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 خالی بر میگرده.اصلا باید از دیتا تیبل استفاده بشه یا نه؟

Mahmoud.Afrad
چهارشنبه 27 اردیبهشت 1391, 13:45 عصر
به این صورت مقدار رو نشان بدید:

LblTotalIncomeInMont.Text = Convert.ToString(dt.Rows[0][0]);

vahid.kh
پنج شنبه 28 اردیبهشت 1391, 17:16 عصر
با این هم جواب نمیده
جلوی لیبل خالی میمونه دوباره.

hosseinenayati_2009
پنج شنبه 28 اردیبهشت 1391, 17:45 عصر
سلام این خط کد مقدار که از اجرای دستور cnn برمیگردونه را میده.

saliestefade.Text = cnn.ExecuteScalar().ToString();

Mahmoud.Afrad
پنج شنبه 28 اردیبهشت 1391, 17:52 عصر
توی جدول amount از چه نوعی هست؟ باید از نوع عددی باشه.

تو لایه یک تابع بنویسید که مقدار عددی برگردونه و به جای دیتاآداپتر و دیتاتیبل از cmd.ExecuteScalar()و یک متغیر استفاده کنید و این متغیر رو return کنید.

vahid.kh
جمعه 29 اردیبهشت 1391, 12:45 عصر
از نوع bigint هستش.به این صورت نوشتم نشد.

public long select1(string sql)
{
string a;
// int b;
long b;
cmd.CommandText = sql;
a=cmd.ExecuteScalar().ToString ();
b = Int32.Parse(a);
return b;

}


public Long Totalinmont()
{
long aa;
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}";
string sql = "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 ={0}";
sql=string .Format (sql ,this .mount );
db.connect ();
if(db.lasterror =="")
{
db.select1(sql);
// db.select(sql);

if(db .lasterror =="")
{
db.disconnect ();
}
}
lasterror =db.lasterror ;

return aa ;
}


long aaa;
aaa=adm.Totalinmont();
LblTotalIncomeInMont.Text = aaa.ToString ();