2010-10-05 14 views
46

मैं अपने कोड के साथ एक समस्या हो रही है:पैरामिट्रीकृत क्वेरी पैरामीटर जो की आपूर्ति नहीं की गई थी उम्मीद

Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged 
    list.Items.Clear() 

    cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%" & TextBox2.Text & "%')" 
    cmd.Connection = con 
    cmd.CommandType = CommandType.Text 
    con.Open() 


    rd = cmd.ExecuteReader() 
    If rd.HasRows = True Then 
     While rd.Read() 

      Dim listview As New ListViewItem 

      listview.Text = rd("ID").ToString 
      listview.SubItems.Add(rd("Department").ToString) 
      listview.SubItems.Add(rd("Purpose").ToString) 
      listview.SubItems.Add(rd("Items_Details").ToString) 
      listview.SubItems.Add(rd("Requested_by").ToString) 
      listview.SubItems.Add(rd("Approved_by").ToString) 
      listview.SubItems.Add(rd("Date").ToString) 
      listview.SubItems.Add(rd("Status").ToString) 
      listview.SubItems.Add(rd("Date_Returned").ToString) 

      list.Items.Add(listview) 

     End While 
    End If 
    con.Close() 

एक बार मैं पाठ बॉक्स में स्ट्रिंग में टाइप किसी आइटम के लिए खोज करने के लिए मैं इस त्रुटि मिलती है:

The parameterized query '(@Parameter1 nvarchar(4000))SELECT * FROM borrow where (Departme' expects the parameter '@Parameter1', which was not supplied.

क्या कोई मेरी मदद कर सकता है?

उत्तर

103

आप पैरामीटर के लिए शून्य मान पारित, तो आप आप जोड़ना पैरामीटर तो मान की जाँच करने के लिए प्रयास करें और यदि यह अशक्त तो DBNull.Value

का उपयोग इस

cmd.Parameters.Add("@Department", SqlDbType.VarChar) 

If (TextBox2.Text = Nothing) Then 
    cmd.Parameters("@Department").Value = DBNull.Value 
Else 
    cmd.Parameters("@Department").Value = TextBox2.Text 
End If 
काम करेंगे के बाद भी इस त्रुटि मिल जाएगा

यह ऑब्जेक्ट परत से शून्य मानों को डीबीएनएल मानों में परिवर्तित करेगा जो डेटाबेस को स्वीकार्य हैं।

+17

शॉर्टंड: सेमीडी। पैरामीटर ("@ विभाग")। वैल्यू = (ऑब्जेक्ट) टेक्स्टबॉक्स 2.Text ?? डीबीएनयूएल.वैल्यू; –

+0

यह काम करता है मेरे लिए .एड को कम किया गया है। cmd.Parameters.AddWithValue ("@ विभाग", (ऑब्जेक्ट) टेक्स्टबॉक्स 2.Text ?? DBNull.Value); –

1

parameters इस तरह जोड़ने की कोशिश -

cmd.Parameters.Add("@Department", SqlDbType.VarChar) 
cmd.Parameters("@Department").Value = TextBox2.Text 

और क्या @Abe Miessler करता है वह सही मैं सिर्फ सोचा कि आप यह पता लगा जाएगा करने के लिए अपने आदेश पाठ बदल जाते हैं।

+0

मैं क्यों चर DepartmentText हो रही पहले से ही घोषित कर रहा हूँ? .. – demic0de

+0

मैं जानता हूँ कि क्यों न .... लेकिन मैं लग रहा है कि आप एक डेटाप्रकार यहां मुद्दा यह है ... या कुछ और है ... 'Departmen देखकर मिलता है 'मुझे लगता है कि आपके पास आवंटित पर्याप्त अक्षर या कुछ नहीं है ... – Vishal

+0

नमस्ते मैंने tnx किया है .. ive ने अपना कोड बदल दिया है लेकिन फिर भी मुझे त्रुटि मिल रही है .. cmd.CommandText = "चुनें * उधार से जहां (विभाग LIKE'% @ विभाग टेक्स्ट% ') "cmd.Parameters.Add (" @ DepartmentText ", SqlDbType.VarChar) cmd.Parameters.AddWithValue (" @ DepartmentText ", TextBox2.Text) त्रुटि" पैरामीटरयुक्त क्वेरी' (@ पैरामीटर 1 nvarchar (4000), @ विभाग वकार (8000), @ प्रस्थानकर्ता 'पैरामीटर' @ पैरामीटर 1 'की अपेक्षा करता है, जिसे आपूर्ति नहीं की गई थी। – demic0de

14

आपकी वेबसाइट हैक होने के गंभीर खतरे में है।

SQL Injection के बारे में पढ़ें और how to prevent it in .NET

आपकी क्वेरी समस्या अभी अपनी चिंताओं के कम से कम है।

लेकिन .....

@ मिथ्या नाम के समाधान के करीब है लेकिन काफी नहीं:

यह करने के लिए आपकी क्वेरी को बदलें:

cmd.CommandText = "SELECT * FROM borrow where (Department LIKE '%@DepartmentText%')" 

और मानकों को इस तरह से (या जिस तरह से जोड़ने कि @ मिस्नोमर करता है):

cmd.Parameters.AddWithValue("@DepartmentText",TextBox2.Text) 

महत्वपूर्ण अंतर यह है कि आपको बदलने की जरूरत है आपका कमांडटेक्स्ट

+0

हाय मैंने tnx किया है .. ive ने अपना कोड बदल दिया है लेकिन फिर भी मुझे त्रुटि मिल रही है .. cmd।कमांडटेक्स्ट = "चुनें * उधार से (विभाग जैसे '% @ विभाग टेक्स्ट%')" cmd. पैरामीटर। जोड़ें ("@ विभाग", एसक्लडीबीटी टाइप। वर्कर) सेमीडी। पैरामीटर। एडविथवैल्यू ("@ विभाग टेक्स्ट", टेक्स्टबॉक्स 2 टेक्स्ट) त्रुटि "पैरामीटरयुक्त क्वेरी '(@ पैरामीटर 1 nvarchar (4000), @ विभाग वर्कर (8000), @ Departmen' पैरामीटर '@ पैरामीटर 1' की अपेक्षा करता है, जो आपूर्ति नहीं की गई थी।" – demic0de

+0

मुझे संदेह है कि आपकी त्रुटि कहीं और से फेंक दी जा रही है क्या आप अपना स्टैक ट्रेस पोस्ट कर सकते हैं? –

+0

क्या आप अपने प्रश्न को अपने अपडेट किए गए कोड से अपडेट भी कर सकते हैं? –

-2
SqlConnection conn = new SqlConnection(connectionString); 

conn.Open(); 
//SelectCustomerById(int x); 
comboBoxEx1.Items.Clear(); 

SqlCommand comm = new SqlCommand("spSelectCustomerByID", conn); 
//comm.Parameters.Add(new SqlParameter("cust_name", cust_name)); 
//comm.CommandText = "spSelectCustomerByID"; 
comm.Parameters.Add(new SqlParameter("cust_id", SqlDbType.Int)); 
comm.CommandType = CommandType.StoredProcedure; 
comm.ExecuteNonQuery(); 

SqlDataAdapter sdap = new SqlDataAdapter(comm); 
DataSet dset = new DataSet(); 
sdap.Fill(dset, "cust_registrations"); 

if (dset.Tables["cust_registrations"].Rows.Count > 0) 
{ 
    comboBoxEx1.Items.Add("cust_registrations").ToString(); 
} 
comboBoxEx1.DataSource = dset; 
comboBoxEx1.DisplayMember = "cust_name"; 
+2

कोई स्पष्टीकरण नहीं? यह एक अच्छा जवाब नहीं है। –

संबंधित मुद्दे

 संबंधित मुद्दे