2017-05-02 7 views
6

मैं सी # ASP.NET उपयोग कर रहा हूँ और है कि खोज शर्त के रूप में 5 पैरामीटर की आवश्यकता है एक खोज समारोह बनाने की योजना बना के 3 शर्तों का उपयोग उदाहरण करते हैं: ए, बी, और सीसंकल्पना

प्रश्न: मैं सभी 7 संभव खोज समारोह है कि बनाने के लिए की जरूरत है: शर्त एक ही के आधार पर

डेटाबेस के लिए सीधे जोड़ता है (SQL)

  1. खोज परिणाम
  2. स्थिति एक + हालत ख
  3. स्थिति एक + हालत बी + हालत ग
  4. स्थिति एक + हालत ग
  5. स्थिति ख केवल
  6. स्थिति बी + हालत ग
  7. स्थिति स

या यह संभव है, डेटाबेस (एसक्यूएल) से तालिका की एक सूची बनाएं और सी # aspx.cs के अंदर एक शर्त बनाएं?

मैं उदाहरण कोड के बारे में नहीं पूछूंगा, मैं केवल खोज फ़ंक्शन के लिए अपने कोडिंग को सरल बनाने के लिए उपलब्ध अवधारणा के लिए पूछ रहा हूं, क्योंकि मेरे पास कम से कम 5 स्थितियां हैं, जो मुझे कम से कम 25 करेगी खोज की सभी संभावनाओं के लिए अलग-अलग खोज कार्य। धन्यवाद।

+0

आप एसक्यूएल में खोजें प्रक्रिया की दुकान और इसे से सी # –

+0

कॉल कर सकते हैं क्या आप इकाई फ्रेमवर्क का उपयोग कर सकते हैं? –

+0

@ एस पेट्रोसोव क्या आप थोड़ा और विस्तार कर सकते हैं? –

उत्तर

3

यह डेटाबेस (SQL) से ऐसा करना संभव है और यह सबसे अच्छा समाधान हो जाएगा। आपको इस तरह के लिए Stored Procedure बनाना होगा।

एसक्यूएल:

Create Proc SP_Search(@A Int, @B NVarChar(20), @C Int) 
    As 
Begin 
    If @A = 0 Set @A = Null 
    If @B = '' Set @B = Null 
    If @C = 0 Set @C = Null 

    Select * From Table Where ([email protected] Or @A Is Null) And ([email protected] Or @B Is Null) And ([email protected] Or @C Is Null) 
End 

मुझे एसक्यूएल ऊपर समझाता हूँ। यह पैरा @A, @B और @C में इनपुट लेगा। यदि @A0 है तो @A = Null सेट करें। ([email protected] Or @A Is Null) स्थिति में एक वैकल्पिक पैरा की तरह काम करते हैं।यदि @A में कुछ मूल्य है तो स्थिति लागू होगी, अगर यह शून्य है तो स्थिति अनदेखा कर देगी। आप इस तरह अधिक param जोड़ सकते हैं।

  1. खोज परिणाम हालत के आधार पर एक ही Exec SP_Search 1,'',0
  2. स्थिति एक + हालत ख Exec SP_Search 1,'A',0
  3. स्थिति एक + हालत बी + हालत ग Exec SP_Search 1,'A',1
  4. स्थिति एक + हालत ग Exec SP_Search 1,'',1
  5. हालत बी केवल Exec SP_Search 0,'A',0
  6. स्थिति बी + हालत ग Exec SP_Search 0,'A',1
  7. स्थिति c केवल Exec SP_Search 0,'',1

सी # कोड कॉल करने के लिए Stored Procedure:

int A = 1; 
string B = "A"; 
int C = 1; 
using (SqlConnection conn = new SqlConnection("Connection String")) { 
    conn.Open(); 
    SqlCommand cmd = new SqlCommand("SP_Search", conn); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add(new SqlParameter("@A", A)); 
    cmd.Parameters.Add(new SqlParameter("@B", B)); 
    cmd.Parameters.Add(new SqlParameter("@C", C)); 
    using (SqlDataReader reader = cmd.ExecuteReader()) { 
     while (reader.Read()) 
     { 
      //Read Your Data Here 
     } 
    } 
} 
0

नहीं, आपको सभी संभावित संयोजनों के लिए कुछ विशेष कार्यों की आवश्यकता नहीं है। इसके अलावा, यह वास्तव में कार्यों की बड़ी संख्या होगी।

आप बस कुछ शर्त निर्दिष्ट करने के लिए जांच सकते हैं और इस स्थिति को जोड़ सकते हैं।
कुछ इस तरह:

public YourEntity[] Search(string name = "", int? age = null, bool? isActive = null) 
{ 
    string query = "SELECT * FROM YourEntities"; 
    List<string> whereConditions = new List<string>(); 

    if (!string.IsNullOrWhiteSpace(name)) 
    { 
     whereConditions.Add($"name LIKE '%{name}%'"); 
    } 

    if (age.HasValue) 
    { 
     whereConditions.Add($"age = {age.Value}"); 
    } 

    if (isActive.HasValue) 
    { 
     whereConditions.Add($"isActive = {isActive.Value:D}"); 
    } 

    if (whereConditions.Any()) 
    { 
     query += "WHERE " + string.Join(" AND ", whereConditions); 
    } 

    return someSqlExecutorAndProcessor(query); 
} 

उसके बाद, आप इस तरह इस विधि का उपयोग कर सकते हैं:

var results = Search(); // all 
var results = Search("name"); // name only 
var results = Search(age: 17); // age only 
var results = Search("name", isActive: true); // name and isActive 

महत्वपूर्ण नोट: नोट इस कोड को स्ट्रिंग संयोजन का उपयोग करता है SQL क्वेरी का निर्माण करने और ऐसा नहीं है कि सुरक्षित, सामान्य विचार प्रदान करने के लिए यह केवल एक न्यूनतम उदाहरण है। मुझे नहीं पता कि आप डेटाबेस के साथ काम करने के लिए क्या उपयोग करते हैं। इसके बजाय parametrized प्रश्न या ORM का प्रयोग करें।

उदाहरण के लिए, यदि आप इकाई की रूपरेखा का उपयोग करें, इसे इस तरह दिखेगा:

public YourEntity[] Search(string name = "", int? age = null, bool? isActive = null) 
{ 
    IQueryable<YourEntity> entities = dbContext.Set<YourEntity>(); 

    if (!string.IsNullOrWhiteSpace(name)) 
    { 
     entities = entities.Where(x => x.Name.Contains(name)); 
    } 

    if (age.HasValue) 
    { 
     entities = entities.Where(x => x.Age == age.Value); 
    } 

    if (isActive.HasValue) 
    { 
     entities = entities.Where(x => x.IsActive == isActive.Value); 
    } 

    return entities.ToArray(); 
} 
संबंधित मुद्दे