PDA

View Full Version : نحوه ايجاد دستور سرچ به صورت صحيح



patrick5053
دوشنبه 09 اردیبهشت 1392, 08:09 صبح
سلام من چندتا تري ويو دارم كه به كاربر اين امكان رو ميده كه با انتخاب گزينه هاي دلخواه از اين تري ويو ها دستور سرچ ايجاد كنه و از بانك استعلام بگيره.
مثلا تري ويو اول كد كالا ها و تري ويو دوم كد مشتريان.
حالا كاربر انتخاب ميكنه كه كدوم كد كالا و كدوم كد مشتري را در دستور سرچ اضافه يا كم كنه.
من با اين دستور گزينه هايي كه توسط كاربر در تري ويو ها انتخاب شده رو استخراج ميكنم.
string queryDoc = "";
int i = 0;
foreach (TreeNode n in treeView2.Nodes)
{
if (n.Checked)
{
if (i == 0)
queryDoc += " and ";
else
queryDoc += " or ";
i++;
queryDoc += "kod=" + "'" + n.Text + "'";
}
}
حالا من يك متغير از نوع استرينگ تعريف ميكنم به اين شكل
string s = "select * from table1 where id>0"
خوب تا اينجا كه من يه دستور ساده اسكيوال و اطلاعات تري ويو ها رو جدا ايجاد كردم.
بهد من ميام اينها رو باهم ادغام و در دستور sqlcommand قرار ميدم به اين شكل.
sqlcommand = s+querydoc;
كه اين دستور ميشه به اين شكل
sqlcommand= select * from tabl1 where id>'0' and kod='1' or kod='2' or kod='3'
مشكل اينجاست كه در دستور بالا بايد قسمتهاي or داخل پرانتز باشند به اين شكل.

sqlcommand= select * from tabl1 where id>'0' and (kod='1' or kod='2' or kod='3')
حالا ميخوام بدونم چطور اين پرانتز ها رو ايجاد كنم.
آيا از دستور replac ميشه اين كار رو كرد يا نه؟
آيا كسي راه بهتر و روشنتري رو داره بهم بگه؟ ممنون.

Rezahak
دوشنبه 09 اردیبهشت 1392, 08:42 صبح
سلام
باید این جوری بنویسی :
if (querydoc <> "")
sqlcommand = s +"(" + querydoc + ")"

patrick5053
دوشنبه 09 اردیبهشت 1392, 09:37 صبح
ممنون دوست عزيز ولي اين راهي كه شما گفتين ميشه به اين شكل. ببينيد
sqlcommand = select * from table1 where id>0 (and kod='1' or kod='2')
كه اين مشكل ايجاد ميكنه چون قسمت and رو هم ميبره داخل پرانتز.
من خودم يه راه حل پيدا كردم.
بازم اگه راه حل بهتري داره ممنون ميشم بگه.
textBoxX13.Text = "";
int count = 0;
int i = 0;
foreach (TreeNode n in treeView2.Nodes)
{
if (n.Checked)
{
if (i == 0)
{
textBoxX13.Text += " and "+"("+"kod=" + "'" + n.Text + "'";
}
else
textBoxX13.Text += " or " + "kod=" + "'" + n.Text + "'";
i++;
}
}
for (int n = 0; n < treeView2.Nodes.Count; n++)
{
if (treeView2.Nodes[n].Checked == true)
{
count += 1;
}
}
if (count > 0)
{
textBoxX13.Text += ")";
}

Mahmoud.Afrad
دوشنبه 09 اردیبهشت 1392, 12:01 عصر
string queryDoc = "";
foreach (TreeNode n in treeView2.Nodes)
{
if (n.Checked)
{
if (!queryDoc.Contains("and"))
{
queryDoc += " and";
}
else
{
queryDoc += " or ";
}

if (queryDoc.EndsWith("and"))
{
queryDoc += " (";
}
queryDoc += "kod='" + n.Text + "'";
}
}

if (queryDoc.Contains("("))
{
queryDoc += ")";
}

patrick5053
دوشنبه 09 اردیبهشت 1392, 14:37 عصر
ممنون دوست عزيز اين راه از راه من بهتره و نيازي به دستور for نداره.
ممنون و موفق باشي.