2012-12-12 11 views
5

मैं एक नया एएसपी.नेट डेवलपर हूं और मैं एक वेब-आधारित एप्लिकेशन विकसित कर रहा हूं जिसमें मेनू बार है जिसमें कई विकल्प हैं। इनमें से कुछ विकल्प केवल व्यवस्थापक को प्रदर्शित किए जाएंगे। सिस्टम के पीछे एक तर्क है कि यह जांचने के लिए कि उपयोगकर्ता एक व्यवस्थापक है या नहीं। यदि हां, तो विकल्प प्रदर्शित होंगे। मैंने विधि लिखी लेकिन मेरे पास एक एसक्यूएल इंजेक्शनियोम है और मैं इसे हटाना चाहता हूं।इस क्वेरी से एसक्यूएल इंजेक्शन को कैसे हटाएं और इसे अच्छी तरह से काम करें?

आपकी जानकारी के लिए, मैं निम्नलिखित डेटाबेस डिजाइन है:

  • उपयोगकर्ता तालिका: NetID, Name, Title
  • व्यवस्थापक तालिका:

    : ID, NetID

यहाँ सी # विधि है

private bool isAdmin(string username) 
{ 
     string connString = "Data Source=appSever\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True"; 
     string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = '" + NetID + "')"; 
     using (SqlConnection conn = new SqlConnection(connString)) 
     { 
      conn.Open(); 
      // Open DB connection. 
      using (SqlCommand cmd = new SqlCommand(cmdText, conn)) 
      { 
       SqlDataReader reader = cmd.ExecuteReader(); 
       if (reader != null) 
        if (reader.Read()) 
         if (reader["ID"].Equals(1)) 
          return true; 
       return false; 
      } 
     } 
    } 

मैं बदलते तीसरी लाइन के लिए कार्य करके इसे बदलने के लिए करने की कोशिश की:

string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID)"; 

लेकिन मैं निम्नलिखित त्रुटि हो गया और मैं नहीं जानता कि क्यों:

Must declare the scalar variable "@NetID".

आप कृपया मदद कर सके मुझे यह हल करने में?

* * अद्यतन:

After updating the code to the following: 
    private bool isAdmin(string username) 
    { 
     string NetID = username; 
     string connString = "Data Source=appServer\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True"; 
     string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID"; 
     using (SqlConnection conn = new SqlConnection(connString)) 
     { 
      conn.Open(); 
      // Open DB connection. 
      using (SqlCommand cmd = new SqlCommand(cmdText, conn)) 
      { 
       cmd.Parameters.AddWithValue("@NetID", NetID); 
       SqlDataReader reader = cmd.ExecuteReader(); 
       if (reader != null) 
        if (reader.Read()) 
         if (reader["NetID"] == username) 
          return true; 
       return false; 
      } 
     } 
    } 

मैं निम्नलिखित त्रुटि मिली:

गलत वाक्य रचना के पास ')'।

इस समस्या को कैसे ठीक करें?

+0

तुम भी एसक्यूएल संग्रहित प्रक्रियाओं सोच सकते हैं। –

+0

अपनी समस्या को ठीक करें, एसक्यूएल इंजेक्शन को हटाने के लिए मेरा संपादन देखें :); – whosrdaddy

+0

मुझे अभी भी एक ही समस्या का सामना करना पड़ रहा है और निम्न त्रुटि के साथ यह त्रुटि प्राप्त हो रही है: 'SqlDataReader reader = cmd.ExecuteReader();' –

उत्तर

1

इस

private bool isAdmin(string username) 
{ 
    string connString = "Data Source=appSever\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True"; 
    string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID)"; 
    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
     conn.Open(); 
     // Open DB connection. 
     using (SqlCommand cmd = new SqlCommand(cmdText, conn)) 
     { 
      cmd.Parameters.AddWithValue("@NetID", NetID); 
      SqlDataReader reader = cmd.ExecuteReader(); 
      if (reader != null) 
       if (reader.Read()) 
        if (reader["ID"].Equals(1)) 
         return true; 
      return false; 
     } 
    } 
} 
+0

आपकी मदद के लिए धन्यवाद। मैं वास्तव में इसकी प्रशंसा करता हूँ। मुझे लगता है कि मुझे तर्क में गलती है। चूंकि आप सवाल में मेरे डेटाबेस डिज़ाइन में देखते हैं क्योंकि नेटआईडी एडमिन्स टेबल से उपयोगकर्ता टेबल तक एक विदेशी कुंजी है, इसलिए मुझे लगता है कि मुझे नेटआईडी कॉलम आईडी नहीं चाहिए, है ना? क्या आप कृपया इसके साथ मेरी मदद कर सकते हैं? –

+0

आईडी और नेटआईडी कॉलम में क्या बचाया जाता है? –

+0

आईडी एक ऑटो-वर्धित प्राथमिक कुंजी है। नेटआईडी उपयोगकर्ता का उपयोगकर्ता नाम है जो उपयोगकर्ता तालिका में प्राथमिक कुंजी के लिए एक विदेशी कुंजी है –

8

आप अपने @NetID पैरामीटर के लिए एक मूल्य के पारित करने के लिए की जरूरत है:

cmd.Parameters.AddWithValue("@NetID", NetID); 
+0

आपकी मदद के लिए बहुत बहुत धन्यवाद। –

+0

क्या आप कृपया मेरा अपडेट किया गया कोड देख सकते हैं? –

+0

@ तकनीक प्रौद्योगिकी, मैंने अद्यतन कोड संकलित किया है और कोई त्रुटि नहीं मिली है। 'Whosrdaddy' का उपयोग कोड संपादित करें और त्रुटि को ठीक करें। अगर आपको इस परियोजना पर और मदद की ज़रूरत है तो कृपया मुझे बताएं। हैप्पी कोडिंग! – RePierre

0

प्रयास करें आप isAdmin विधि में पैरामीटर के रूप में NetId का उपयोग करते हैं की तुलना में यह करने में मदद मिलेगी

private bool isAdmin(string NetID) 
{ 
string connString = "Data Source=appSever\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True"; 
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID)"; 
using (SqlConnection conn = new SqlConnection(connString)) 
{ 
    conn.Open(); 
    // Open DB connection. 
    using (SqlCommand cmd = new SqlCommand(cmdText, conn)) 
    { 
     cmd.Parameters.AddWithValue("@NetID", NetID); 
     string value = cmd.ExecuteScalar().tostring(); 
     if (value != null) 
      return true; 
     else 
      return false; 
    } 
} 

}

0

इसका बेहतर उपयोग करने के लिए

cmd.Parameters.Add("@netid",SqlBdType.Int).Value=NetID; 
संबंधित मुद्दे