PDA

View Full Version : مبتدی: پیدا کردن ماکسیمم عدد در دیتابیس اکسس



aliramazani
جمعه 08 اسفند 1393, 14:56 عصر
دیتابیس اکسس

میخوام در جدول ذگر شده بعد از جستچو بیشترین عدد پیدا بشه و توی تکس باکس نشون داده بشه.
لطفا کد زیر را برام اصلاح کنید.
با تشکر


DataTable dtResult1 = new System.Data.DataTable(); string SIDE_Name;
SIDE_Name = side.Text;
if (SIDE_Name == "ماشین")
{
SIDE_Name = "Pusher";
}
if (SIDE_Name == "کک")
{
SIDE_Name = "Coke";
}





command.Remove(0, command.Length);


command.Append("select MAX(WenDu) from tb_ZhiXingInfoDetail where ");
if (cell.Text != string.Empty)
command.Append("rssId = @rssId AND ");
if (block.Text != string.Empty)
command.Append("jiaoluhao = @jiaoluhao and ");
if (label10.Text != string.Empty)
command.Append("jiaolutype = @jiaolutype and ");
if (date1.Text != "")
command.Append("inputDate >= @inputDate and ");
if (date2.Text != "")
command.Append("inputDate <= @inputDate1 and ");
command.Append("1 = 1");


cmd.CommandText = command.ToString();
cmd.Connection = con;


cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@rssId", cell.Text);
cmd.Parameters.AddWithValue("@jiaoluhao", block.Text);
cmd.Parameters.AddWithValue("@jiaolutype", label10.Text);
cmd.Parameters.AddWithValue("@inputDate", date1.Text.ToString());
cmd.Parameters.AddWithValue("@inputDate1", date2.Text.ToString());


dtResult1.Clear();


da = new OleDbDataAdapter(cmd);
da.Fill(dtResult1);


maxtxt.Text = dtResult1.ToString();

danialafshari
جمعه 08 اسفند 1393, 17:08 عصر
با سلام
چرا خودتون رو به زحمت میندازید؟
نتیجه کوئری max رو درون یک متغیر int قرار دهید
موفق باشید

aliramazani
جمعه 08 اسفند 1393, 17:22 عصر
سلام من تا الان linq کار کردم ولی توی این پروژه باید به این شکل باشه.
اگه امکانش هست همین کد را برم اصلاح کنید

Mahmoud Zaad
دوشنبه 03 فروردین 1394, 21:16 عصر
سلام
دیتاتیبل مثل همون تیبل های دیتابیس هست پس شما باید مقدار ستون مورد نظر رو توی تکست باکستون نشون بدید نه خود دیتاتیبل رو.
با فرض اینکه کوئری شما مقدار برگرودنه:
maxtxt.Text = dtResult.Rows[0]["maxValue"].ToString();

maxValue یک Alias هست لذا کوئری رو هم به شکل زیر بنویسید:
select MAX(WenDu) AS maxValue from tb_ZhiXingInfoDetail where

aliramazani
دوشنبه 03 فروردین 1394, 22:34 عصر
اگر بخوام هم ماکسیمم و هم مینیمم را داشته باشم باید برای هر کدوم این کدها را تکرار کنم؟

aliramazani
دوشنبه 03 فروردین 1394, 23:02 عصر
سلام
دیتاتیبل مثل همون تیبل های دیتابیس هست پس شما باید مقدار ستون مورد نظر رو توی تکست باکستون نشون بدید نه خود دیتاتیبل رو.
با فرض اینکه کوئری شما مقدار برگرودنه:
maxtxt.Text = dtResult.Rows[0]["maxValue"].ToString();

maxValue یک Alias هست لذا کوئری رو هم به شکل زیر بنویسید:
select MAX(WenDu) AS maxValue from tb_ZhiXingInfoDetail where

این کد آخرین رکورد را بر میگردونه نه بیشترین رو

aliramazani
دوشنبه 03 فروردین 1394, 23:36 عصر
من این کد را نوشتم ولی به تاریخها ایراد میگیره

OleDbCommand MAX = new OleDbCommand("select Max(WenDu) from tb_ZhiXingInfoDetail where rssId=" + cell.Text + " AND jiaoluhao=" + block.Text + " And jiaolutype=" + label10.Text + " And inputDate >=" + date1.Text.ToString() + " And inputDate <=" + date2.Text.ToString() + " And 1 = 1" + " ORDER BY inputDate,inputTime", con);

con.Open();
OleDbDataReader drMAX = MAX.ExecuteReader();
if (drMAX.Read())
{
int txt = Int32.Parse(drMAX[0].ToString());
ma.Text = txt.ToString();
}
con.Close();

aliramazani
دوشنبه 03 فروردین 1394, 23:40 عصر
پیغام خطاش اینه:

Additional information: You tried to execute a query that does not include the specified expression 'inputDate' as part of an aggregate function.

Mahmoud Zaad
سه شنبه 04 فروردین 1394, 12:19 عصر
این کد آخرین رکورد را بر میگردونه نه بیشترین رو
نه بیشترین رو بر میگردونه، شاید در اطلاعات شما آخرین مقدار بیشترین مقدار هم هست.

شما می تونید min, max, avg و ... رو توی یه کوئری بیارید حتی می تونید مینیم یه فیلد با ماکسیمم یه فیلد دیگه و ... رو با هم توی یه کوئری بیارید.

select MAX(WenDu) AS maxValue, MIN(WenDu) As minValue, AVG(WenDu) AS avgValue from tb_ZhiXingInfoDetail where

یه نمونه ساده به صورت زیر میشه:

OleDbDataAdapter da = new OleDbDataAdapter("select MAX(WenDu) AS maxValue, MIN(WenDu) As minValue, AVG(WenDu) AS avgValue from tb_ZhiXingInfoDetail", cn);

DataTable dt = new DataTable();

da.Fill(dt);

this.Text = "max: " + dt.Rows[0]["maxValue"].ToString() + " min: " + dt.Rows[0]["minValue"].ToString() + " avg: " + dt.Rows[0]["avgValue"].ToString();

aliramazani
سه شنبه 04 فروردین 1394, 21:52 عصر
command.Remove(0, command.Length);

command.Append("select MAX(WenDu) AS maxValue from tb_ZhiXingInfoDetail where ");


if (cell.Text != string.Empty)
command.Append("rssId = @rssId AND ");
if (block.Text != string.Empty)
command.Append("jiaoluhao = @jiaoluhao and ");
if (label10.Text != string.Empty)
command.Append("jiaolutype = @jiaolutype and ");
if (date1.Text != "")
command.Append("inputDate >= @inputDate and ");
if (date2.Text != "")
command.Append("inputDate <= @inputDate1 and ");
command.Append("1 = 1");
//command.Append(" ORDER BY inputDate,inputTime");
cmd.CommandText = command.ToString();
cmd.Connection = con;


cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@rssId", cell.Text);
cmd.Parameters.AddWithValue("@jiaoluhao", block.Text);
cmd.Parameters.AddWithValue("@jiaolutype", label10.Text);
cmd.Parameters.AddWithValue("@inputDate", date1.Text.ToString());
cmd.Parameters.AddWithValue("@inputDate1", date2.Text.ToString());




maxtxt.Text = dtResult.Rows[0]["maxValue"].ToString();
این کد اجراش پیغام زیر را میده:
129690

aliramazani
سه شنبه 04 فروردین 1394, 21:57 عصر
ولی اگه از این کد استفاده کنم:


maxtxt.Text = dtResult.Rows[0]["WenDu"].ToString();

پیغام زیر را میده:
129691

توی لیست اعداد ببینید عدد بزرگترم هست ولی این اولین رکورد را نشون میده

aliramazani
سه شنبه 04 فروردین 1394, 22:11 عصر
درست شد. dtresult قبلا جایی دیگه اولین خروجی را برمیگردوند یه دیتاتیبل دیگه تعریف کردم