PDA

View Full Version : سوال: خالی گذاشتن چندین پارامتر در هنگام select



esagraphic
یک شنبه 08 شهریور 1394, 01:32 صبح
سلام به همه من با این روش دیتا ها را select میکنم و پارامتر ها از تکس باکس می گیرم مشکلم اینه باید همه پارامتر ها را کامل بفرستم طبقی که نوشتم ایا به نظر شما کار میشه کرد اگر دو یا یک پارامتر را بنویسم همونارا سیلکت کنه باقیه را نکنه و یا یکی اگه نه من باید برای هر روش یک دستور سیلیکت بنویسم کارم کلی جنجالی میشه


string cnstr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\haic.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection cn = new SqlConnection(cnstr);
SqlDataAdapter da = new SqlDataAdapter(" select * from weight where datefullmiladi >='"+Convert.ToDateTime(miladi1)+"' and datefullmiladi<='"+Convert.ToDateTime(miladi2)+"' and (Truckno='" + textBox1.Text + "' or truckno is null ) and (goods like N'" + textBox2.Text + "' or goods is null )", cn);
da.Fill(dtt);
reportViewer1.LocalReport.DataSources.Clear();
ReportDataSource repts = new ReportDataSource("weight",dtt);
reportViewer1.LocalReport.DataSources.Add(repts);
reportViewer1.RefreshReport();


کارم کلی گیره اگه میشه رهنمای کنید که چیطور چند پارامتر را خالی بزارم اونها را سرچ نکنه

محمد رضا فاتحی
یک شنبه 08 شهریور 1394, 07:22 صبح
سلام دوست عزیز...
شما می تونید قبل از اینکه کوئری رو کامل کنید بیاین با توجه به فیلدهای پر شده کوئری رو مدیریت کنید
این یه نمونه کد ساده که تمام پارامترها رو با And ترکیب می کنه که اگه خواستی حرفه ای تر باشه می تونی با کامبو باکس روابط فیلدها رو مدیریت کنی

string command = "";
string condition = "";
if (TxtName.Text != "")
{
condition += " name =N'" + TxtName.Text + "' And ";
}
if (TxtFamil != "")
{
condition += " famil =N'" + TxtFamil.Text + "' And ";
}
if (condition != "")
{
condition = condition.Remove(condition.Length - 4, 4);
command = "select * from stdtbl where " + condition;
}
else
{
command = "select * from stdtbl";
}

esagraphic
یک شنبه 08 شهریور 1394, 08:46 صبح
سلام دوست عزیز...
شما می تونید قبل از اینکه کوئری رو کامل کنید بیاین با توجه به فیلدهای پر شده کوئری رو مدیریت کنید
این یه نمونه کد ساده که تمام پارامترها رو با And ترکیب می کنه که اگه خواستی حرفه ای تر باشه می تونی با کامبو باکس روابط فیلدها رو مدیریت کنی

string command = "";
string condition = "";
if (TxtName.Text != "")
{
condition += " name =N'" + TxtName.Text + "' And ";
}
if (TxtFamil != "")
{
condition += " famil =N'" + TxtFamil.Text + "' And ";
}
if (condition != "")
{
condition = condition.Remove(condition.Length - 4, 4);
command = "select * from stdtbl where " + condition;
}
else
{
command = "select * from stdtbl";
}



روش خیلی خوبیه باشه من امتحان کنم

esagraphic
یک شنبه 08 شهریور 1394, 10:02 صبح
سلام دوست عزیز...
شما می تونید قبل از اینکه کوئری رو کامل کنید بیاین با توجه به فیلدهای پر شده کوئری رو مدیریت کنید
این یه نمونه کد ساده که تمام پارامترها رو با And ترکیب می کنه که اگه خواستی حرفه ای تر باشه می تونی با کامبو باکس روابط فیلدها رو مدیریت کنی

string command = "";
string condition = "";
if (TxtName.Text != "")
{
condition += " name =N'" + TxtName.Text + "' And ";
}
if (TxtFamil != "")
{
condition += " famil =N'" + TxtFamil.Text + "' And ";
}
if (condition != "")
{
condition = condition.Remove(condition.Length - 4, 4);
command = "select * from stdtbl where " + condition;
}
else
{
command = "select * from stdtbl";
}




سلام میشه بگین نظر به کدی که من نوشتم اینو چیطور پیاده کنم من از sqldataadapter استفاده میکنم شما از کامند کار گرفتین

محمد رضا فاتحی
یک شنبه 08 شهریور 1394, 10:23 صبح
مشکلی نیست که ادامش بدین

SqlDataAdapter da = new SqlDataAdapter(command, con);
DataTable dt=new DataTable();
con.Open();
da.Fill(dt);
con.Close();

esagraphic
یک شنبه 08 شهریور 1394, 11:22 صبح
مشکلی نیست که ادامش بدین

SqlDataAdapter da = new SqlDataAdapter(command, con);
DataTable dt=new DataTable();
con.Open();
da.Fill(dt);
con.Close();


سلام ببینید من به این روش عمل کردم اما در قسمت da.fill(dtt) ایرور میده میگه ExecuteReader: CommandText property has not been initialized

اینم از کل کدم

tring cnstr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\haic.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection cn = new SqlConnection(cnstr);
SqlDataAdapter da = new SqlDataAdapter(command,cn);
DataTable dtt = new DataTable();

if (miladi1!="" || miladi2!="")
{
condation += "datefullmiladi>=N'" + Convert.ToDateTime(miladi1) + "' and datefullmiladi<=N'" + Convert.ToDateTime(miladi2) + "' and ";
}
if (textBox1.Text!="")
{
condation += "truckno=N'" + textBox1.Text + "' and ";
}
if (textBox2.Text!="")
{
condation += "goods=N'" + textBox2.Text + "' and ";
}
if (condation!="")
{
condation = condation.Remove(condation.Length - 4, 4);
command = " select * from Weight where " + condation;
}
else
{
command = "select * from Weight ";
}

cn.Open();
da.Fill(dtt);
cn.Close();
reportViewer1.LocalReport.DataSources.Clear();
ReportDataSource repts = new ReportDataSource("weight", dtt);
reportViewer1.LocalReport.DataSources.Add(repts);
reportViewer1.RefreshReport();

محمد رضا فاتحی
یک شنبه 08 شهریور 1394, 11:32 صبح
این خطا رو چرا داده؟؟
چون اومدید قبل از اینکه command رو مقدار دهی کنید ازش استفاده کردید
اینطوری تغییرش بده

string cnstr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\haic.mdf;Integrated Security=True;Connect Timeout=30";
SqlConnection cn = new SqlConnection(cnstr);
if (miladi1 != "" || miladi2 != "")
{
condation += "datefullmiladi>=N'" + Convert.ToDateTime(miladi1) + "' and datefullmiladi<=N'" + Convert.ToDateTime(miladi2) + "' and ";
}
if (textBox1.Text != "")
{
condation += "truckno=N'" + textBox1.Text + "' and ";
}
if (textBox2.Text != "")
{
condation += "goods=N'" + textBox2.Text + "' and ";
}
if (condation != "")
{
condation = condation.Remove(condation.Length - 4, 4);
command = " select * from Weight where " + condation;
}
else
{
command = "select * from Weight ";
}
SqlDataAdapter da = new SqlDataAdapter(command, cn);
DataTable dtt = new DataTable();
cn.Open();
da.Fill(dtt);
cn.Close();


reportViewer1.LocalReport.DataSources.Clear();
ReportDataSource repts = new ReportDataSource("weight", dtt);
reportViewer1.LocalReport.DataSources.Add(repts);
reportViewer1.RefreshReport();