الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن طريقة البحث من خلال صفحة الويب إلى القاعدة

مغلقمُجاب
بدأه sunset98 في 21 أبريل 2013 · 10 رد · 1,422 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لدي سؤال عن طريقة البحث

 

فمثلا لدينا بيانات خاصة بالمريض واريد الاستعلام عن امور معينة فمثلا اظهر لي جميع المرضى الذي لديهم الصفه X

ولدينا واجهة مستخدم  -صفحة ويب-مصمة لذالك ..

ولدينا جملة استعلام تتضمن كل ذلك ولا خلاف عليها

 

سؤالي في العرف البرمجي ماهي الطريقة المناسبة لإتمام ذالك..

 

استخدمت  if statement  لتطبيق ذالك لكن وجودها لا يقوم بالمطلوب .. طبقتها في جزء معين , نجح الامر وعندما اريد اضافة جزء اخر اصبح معقدأ جداً ويصعب علي ترتيب الاحتمالات الي ممكن ان يستخدمها المستخدم

 

فمثلا اظهر المرضى في المدينة الفلانية الذين يحملون الصفة X 

ولربما تفاصيل اخرى

 

هل من طريقة منظمة استطيع اخذ كل المدخلات( من CheckBoxاو TextBox) بصورة واحده وتطبيقها في جملة الاستعلام دون تعقيد او مشاكل

 

كود C#

    String c1 = "", c2 = "", c3 = "";
    string cc_yes="";
    string cc_no="";
    string region = "";
 protected void showPatient()
    {


        string constring = @"Data Source=ASUS1-PC;Initial Catalog=banktissueVII;Integrated Security=True";
        SqlConnection conn = conn = new SqlConnection(constring);
        DataTable dt = new DataTable();
        DataSet ds = new DataSet();
  
        try
        {
            
            if (CheckBox1.Checked)
            {
                c1 = "Non-Chemo";
            } 
            else
                if (CheckBox2.Checked)
                {
                    c2 = "Chemo";
                }
                else
                    if (CheckBox3.Checked)
                    {
                        c3 = "Plastic surgery";
                    }
          if ((CheckBox2.Checked) && (CheckBox1.Checked))
            {
                c1 = "Non-Chemo";
                c2 = "Chemo";

            }
            else
                        if ((CheckBox2.Checked) && (CheckBox3.Checked))
                        {
                            c2 = "Chemo";
                            c3 = "Plastic surgery";

                        }
                        if ((CheckBox1.Checked) && (CheckBox3.Checked))
                        {
                            c1 = "Non-Chemo";
                            c3 = "Plastic surgery";

                        }

                        else

                if ((CheckBox2.Checked) && (CheckBox1.Checked) && (CheckBox3.Checked))
                {
                    c1 = "Non-Chemo";
                    c2 = "Chemo";
                    c3 = "Plastic surgery";

                }


              if (CCYes.Checked){
                  cc_yes = "Yes";
              }
              else if(CCNo.Checked) {
                  cc_no = "No";
              }
              else if((CCNo.Checked) && (!CCYes.Checked)) {
                  cc_no = "No";
              }
               if((!CCNo.Checked) && ( CCYes.Checked)) {
                   cc_yes = "Yes";
              }
              else{
                  cc_yes = "Yes";
                  cc_no = "No";
              
              }
                        
 
          
            region = regionText.Text.ToString();

            string SelectCommand = "select * from showAllPatient() 
where  treatment='" + c1 + "' and treatment='" + c2 + "'and treatment='" + 
c3 + "' or region ='" + region + "' 
and clinical_char ='" + cc_yes + "' or clinical_char ='" + cc_no + "';";
     
            using (SqlCommand cmd = new SqlCommand(SelectCommand, conn))
            {
                conn.Open();
              
                SqlDataAdapter da = new SqlDataAdapter(SelectCommand, conn);
                da.Fill(dt);
            }}
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
        finally
        {

            conn.Close();
        }
        GridView2.DataSource = dt;
        GridView2.DataBind();




   

    }

         protected void Button1_Click(object sender, EventArgs e)
    {
        clareSerch();
        showPatient();
    }
    protected void clareSerch() {

         c1="";
         c2="";
         c3 = "";
       cc_yes = "";
        cc_no = "";
        region = "";
    
    }
#2

يوجد في توقيعي تجاهل الفرز قد يفيدك

#3 أفضل إجابة

السلام عليكم

 

وجدت السؤال في جديد المواضيع فدخلت فإذا بي أمام لغة C# :) , عموماً سأشرح الفكرة وكتابة الكود عليكِ .

 

للتعامل السهل عليك عمل ما يعرف بتوليد الإستعلام تلقائياً على حسب المدخلات , أمر جميل وكيف سيتم هذا الأمر ؟

 

لتوليد الإستعلام علينا جلب القيم من المستخدم بطريقة ما جملة واحدة ومن ثم توليد الإستعلام على أساس المدخلات , دعونا نفصل الأمر بشئ عملي أكثر , فلنفرض أن لدينا جدول للمرضى باسم patients وبه بيانات المرضى ونريد جلب حقول معينة فقط كالرقم التعريفي والاسم والسن سيكون كود الإستعلام على النحو التالي :

SELECT patient_id,patient_name,patient_age FROM patients

الأمر هنا سهل ولكن ما بال لو كانت هذه الحقول متغيرة ؟ أي نريد جلب حقول معينة على حسب المدخلات من المستخدم - إستخدام شروط if أو switch أمر ممل حقاً- , ولتكن على سبيل المثال هناك حقول checkbox بعدد الحقول الموجودة في الجدول وكل checkbox يحمل اسم هو نفس اسم الحقل في قاعدة البيانات -توحيد التسمية بين حقول الجدول واسماء عناصر النماذج أمر مطلوب لتسهيل عملية البرمجة- في حال تم إختيار عدد من عناصر الـ checkbox سيتم تخزين اسماء هذه الـ checkboxs في مصفوفة مثلاً ومن ثَم يتم تحويل هذه المصفوفة إلى سلسة نصية يتم الفصل بين قيمها بإستخدام الفاصلة , وبعد ذلك يتم تضمين هذه السلسة النصية للإستعلام , كيف يتم هذا الأمر بلغة C# هذا الأمر أنت من تفعليه أو أحد الزملاء  لأني لن أستطيع أن أفيدك فيه .

 

وهكذا بالنسبة للشرط WHERE يتم دمج الشروط في مصفوفة مثلاً عناصرها على الشكل patient_='10' وهكذا ويتم تحويل المصفوفة لسلة نصية بالفصل بين عناصرها بجملة AND مسبوقة بمسافة فارغة وبعدها مسافة فارغة , وهكذا على هذا النحو لتوليد الإستعلام المناسب .

 

دمتم في أمان الله

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#4

 اخي شوف هذا الرابط http://learn.arab-code.com/?op=article_com&view=article&id=261

او  ارفق المشروع سوف اعدل عليه 

تم تعديل هذه المشاركة بواسطة ورق خسرانه في 21 أبريل 2013 في 12:47

1
#5
KARIMSOFT كتب:

يوجد في توقيعي تجاهل الفرز قد يفيدك

 

للاسف قرأته من قبل ولم استطيع ربط مااريد ان اقوم به وماقمت به .. شكراً لك

#6
ahmedsaoud31 كتب:

السلام عليكم

 

وجدت السؤال في جديد المواضيع فدخلت فإذا بي أمام لغة C# :) , عموماً سأشرح الفكرة وكتابة الكود عليكِ .

 

للتعامل السهل عليك عمل ما يعرف بتوليد الإستعلام تلقائياً على حسب المدخلات , أمر جميل وكيف سيتم هذا الأمر ؟

 

لتوليد الإستعلام علينا جلب القيم من المستخدم بطريقة ما جملة واحدة ومن ثم توليد الإستعلام على أساس المدخلات , دعونا نفصل الأمر بشئ عملي أكثر , فلنفرض أن لدينا جدول للمرضى باسم patients وبه بيانات المرضى ونريد جلب حقول معينة فقط كالرقم التعريفي والاسم والسن سيكون كود الإستعلام على النحو التالي :

SELECT patient_id,patient_name,patient_age FROM patients

الأمر هنا سهل ولكن ما بال لو كانت هذه الحقول متغيرة ؟ أي نريد جلب حقول معينة على حسب المدخلات من المستخدم - إستخدام شروط if أو switch أمر ممل حقاً- , ولتكن على سبيل المثال هناك حقول checkbox بعدد الحقول الموجودة في الجدول وكل checkbox يحمل اسم هو نفس اسم الحقل في قاعدة البيانات -توحيد التسمية بين حقول الجدول واسماء عناصر النماذج أمر مطلوب لتسهيل عملية البرمجة- في حال تم إختيار عدد من عناصر الـ checkbox سيتم تخزين اسماء هذه الـ checkboxs في مصفوفة مثلاً ومن ثَم يتم تحويل هذه المصفوفة إلى سلسة نصية يتم الفصل بين قيمها بإستخدام الفاصلة , وبعد ذلك يتم تضمين هذه السلسة النصية للإستعلام , كيف يتم هذا الأمر بلغة C# هذا الأمر أنت من تفعليه أو أحد الزملاء  لأني لن أستطيع أن أفيدك فيه .

 

وهكذا بالنسبة للشرط WHERE يتم دمج الشروط في مصفوفة مثلاً عناصرها على الشكل patient_='10' وهكذا ويتم تحويل المصفوفة لسلة نصية بالفصل بين عناصرها بجملة AND مسبوقة بمسافة فارغة وبعدها مسافة فارغة , وهكذا على هذا النحو لتوليد الإستعلام المناسب .

 

دمتم في أمان الله

 

نعم فمهت الفكرة وطبقتها ..

 

اخذت list  ادخلت فيها بما يسمى ال KeyValuePair   القيمة الاولى تحوى على اسم الصف والاخرى القيمة المختارة من الواجهة ..

وثم اقوم بتوليد جملة الاستعلام بناء على ماتم اختيارة من المستخدم وذلك ننشيء الاستعلام ع حسب الحاجه اي لاداعي لقيم فارعه...

إلى هنا رائع جداً...لكن وصلت لمشكلة صغير ه..

 

 وهو ظهور ال and  في اخر جملة الاستعلام ..

 

 

C#

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class userAccount_key_value : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    List<KeyValuePair<string, string>> listOfPairs;
    protected void testValu()
    {


        listOfPairs = new List<KeyValuePair<string, string>>();
 
 




}

    protected void prep() { 
  
    if(CC_No.Checked){

        listOfPairs.Add(new KeyValuePair<string, string>("clinical_char","no"));
    
    }
    if (CC_yes.Checked) {
        listOfPairs.Add(new KeyValuePair<string, string>("clinical_char", "yes"));
    }
    if (CheckBox1.Checked) {
        listOfPairs.Add(new KeyValuePair<string, string>("treatment", "Non-Chemo"));
    }
    if (CheckBox2.Checked) {
        listOfPairs.Add(new KeyValuePair<string, string>("treatment", "Chemo"));
    }
    if (CheckBox3.Checked) {
        listOfPairs.Add(new KeyValuePair<string, string>("treatment", "Plastic surgery"));
    }

    }

    protected string generateSQL() {
        prep();
       string  sqlStatment="select * from patient where ";
        String extemtion ;
       foreach (KeyValuePair<string, string> p in listOfPairs)
       {
       
 
       extemtion = p.Key.ToString() + " = " + "'" + p.Value.ToString() + "'" + " and ";//here

       sqlStatment =sqlStatment+extemtion;

       }
 


        return sqlStatment;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        testValu();
        result.Text = generateSQL();
    }
    protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {

    }
    protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
    {

    }
    protected void CheckBox3_CheckedChanged(object sender, EventArgs e)
    {

    }
    protected void CC_yes_CheckedChanged(object sender, EventArgs e)
    {

    }
    protected void CC_No_CheckedChanged(object sender, EventArgs e)
    {

    }
}

 asp.net

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="key_value.aspx.cs" Inherits="userAccount_key_value" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        CC:<br />
        <asp:CheckBox ID="CC_No" runat="server" oncheckedchanged="CC_No_CheckedChanged" 
            Text="No" />
        <asp:CheckBox ID="CC_yes" runat="server" 
            oncheckedchanged="CC_yes_CheckedChanged" Text="Yes" />
        <br />
        Tretmanet type:<br />
        <asp:CheckBox ID="CheckBox1" runat="server" 
            oncheckedchanged="CheckBox1_CheckedChanged" Text="Non-Chemo" />
        <br />
        <asp:CheckBox ID="CheckBox2" runat="server" 
            oncheckedchanged="CheckBox2_CheckedChanged" Text="Chemo" />
        <br />
        <asp:CheckBox ID="CheckBox3" runat="server" 
            oncheckedchanged="CheckBox3_CheckedChanged" Text="Plastic surgery" />
    <br />

        <asp:Label ID="result" runat="server" Text="Label"></asp:Label>
    
        <br />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Go" />
    
    </div>
    </form>
</body>
</html>

 

شكراً جزيلا لطرح هذه الفكره

ورق خسرانه كتب:

 اخي شوف هذا الرابط http://learn.arab-code.com/?op=article_com&view=article&id=261

او  ارفق المشروع سوف اعدل عليه 

 جزاك الله خير ..

#7

السلام عليكم

 

 

لتجاهل أخر قيمة مضافة يمكن وضع شرط لذلك داخل الحلقة أو حفظ القيم في مصفوفة وتحويلها بإستخدام تعليمة join كالتالي :

string.Join(" AND ", arr);

- طبعاً يمكن فصل عناصر المصفوفة بأي شي بإستبدال القيمة بين علامتي التنصيص .

 

موفقه بإذن الله

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#8

هل من مساعده للاسف لم استطيع ازالة قيمة and في اخر سطر الاستعلام؟

#9

 اخي .. ارفق المشروع وسيتم التعديل عليه 

#10

السلام عليكم

 

اقتباس

هل من مساعده للاسف لم استطيع ازالة قيمة and في اخر سطر الاستعلام؟

- ردك هذا جعلني أظن أن ما طرحته من حلول صعب التنفيذ في C# , ولكن الأمر كان بسيط .

 

عموماً الحل الأول الذي طرحته وهو وضع شرط لتجاهل إضافة AND لأخر قيمة كالتالي :

protected string generateSQL()
{
    prep();
    string sqlStatment = "SELECT * FROM patient WHERE ";
    String extemtion;
    int count = 0;
    foreach (KeyValuePair<string, string> p in listOfPairs)
    {
        count++;
        if (count < listOfPairs.Count)
        {
            extemtion = p.Key.ToString() + " = " + "'" + p.Value.ToString() + "'" + " AND ";
        }
        else
        {
            extemtion = p.Key.ToString() + " = " + "'" + p.Value.ToString() + "'";
        }
        sqlStatment = sqlStatment + extemtion;

    }
    return sqlStatment;
}

- طبعاً إستخدمت Count لحساب عدد عناصر المصفوفة ومن ثم تطبيق الشرط .

 

الحل الثاني بإستخدام join لتحويل المصفوفة لسلسة نصية مباشراً , وطبعاً هذا الحل هو الأفضل كالتالي :

protected string generateSQL()
{
    prep();
    string sqlStatment = "SELECT * FROM patient WHERE ";
    string[] extemtion = new string[listOfPairs.Count];
    int count = 0;
    foreach (KeyValuePair<string, string> p in listOfPairs)
    {
        extemtion[count++] = p.Key.ToString() + " = " + "'" + p.Value.ToString() + "'";
    }
    return sqlStatment + string.Join(" AND ", extemtion);
}

دمتم في أمان الله

1

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#11
ahmedsaoud31 كتب:

السلام عليكم

 

- ردك هذا جعلني أظن أن ما طرحته من حلول صعب التنفيذ في C# , ولكن الأمر كان بسيط .

 

عموماً الحل الأول الذي طرحته وهو وضع شرط لتجاهل إضافة AND لأخر قيمة كالتالي :

protected string generateSQL()
{
    prep();
    string sqlStatment = "SELECT * FROM patient WHERE ";
    String extemtion;
    int count = 0;
    foreach (KeyValuePair<string, string> p in listOfPairs)
    {
        count++;
        if (count < listOfPairs.Count)
        {
            extemtion = p.Key.ToString() + " = " + "'" + p.Value.ToString() + "'" + " AND ";
        }
        else
        {
            extemtion = p.Key.ToString() + " = " + "'" + p.Value.ToString() + "'";
        }
        sqlStatment = sqlStatment + extemtion;

    }
    return sqlStatment;
}

- طبعاً إستخدمت Count لحساب عدد عناصر المصفوفة ومن ثم تطبيق الشرط .

 

الحل الثاني بإستخدام join لتحويل المصفوفة لسلسة نصية مباشراً , وطبعاً هذا الحل هو الأفضل كالتالي :

protected string generateSQL()
{
    prep();
    string sqlStatment = "SELECT * FROM patient WHERE ";
    string[] extemtion = new string[listOfPairs.Count];
    int count = 0;
    foreach (KeyValuePair<string, string> p in listOfPairs)
    {
        extemtion[count++] = p.Key.ToString() + " = " + "'" + p.Value.ToString() + "'";
    }
    return sqlStatment + string.Join(" AND ", extemtion);
}

دمتم في أمان الله

جزاك الله خير ا

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…