2010-10-05 5 views
46

Je vais avoir un problème avec mon code:La requête paramétrées attend le paramètre qui n'a pas été fourni

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() 

Une fois que je tapé dans la chaîne dans la zone de texte pour rechercher un article que je reçois cette erreur:

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

Quelqu'un peut-il m'aider?

Répondre

103

Si vous passez valeur nulle au paramètre, vous obtiendrez cette erreur même après avoir ajouté le paramètre donc essayez de vérifier la valeur et si elle nulle puis utilisez DBNull.Value

Cela fonctionne

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 

Cela convertira les valeurs nulles de la couche d'objet en valeurs DBNull acceptables pour la base de données.

+17

Graphe: cmd.Parameters ("@ Département"). Value = (objet) TextBox2.Text ?? DBNull.Value; –

+0

Cela fonctionne Le .Add a été déprécié: cmd.Parameters.AddWithValue ("@ Department", (objet) TextBox2.Text ?? DBNull.Value); –

1

Essayez d'ajouter parameters comme ça -

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

et modifier le texte de votre commande à ce @Abe Miessler fait il est juste, je pensais juste que vous comprendre.

+0

pourquoi suis-je obtenir DepartmentText variables déjà déclaré? .. – demic0de

+0

Je ne sais pas pourquoi .... mais je le sentiment que vous avez un problème de type de données ici ... ou quelque chose ... voir le 'Departmen 'Je pense que vous n'avez pas assez de caractères attribués ou quelque chose ... – Vishal

+0

Salut j'ai tnx .. ive changé mon code mais toujours im obtenir l'erreur .. cmd.CommandText =" SELECT * FROM emprunter où (Département LIKE '% @ DepartmentText% ') "cmd.Parameters.Add (" @ DepartmentText ", SqlDbType.VarChar) cmd.Parameters.AddWithValue (" @ DépartementText ", TextBox2.Text) erreur" La requête paramétrée "(@ Parameter1 nvarchar (4000), @ Département varchar (8000), @ Departmen 'attend le paramètre' @ Parameter1 ', qui n'a pas été fourni – demic0de

14

Votre site Web risque sérieusement d'être piraté.

Lire sur SQL Injection et how to prevent it in .NET

Votre problème de requête est le moindre de vos préoccupations en ce moment.

Mais .....

@ solution de Misnomer est proche, mais pas tout à fait:

Changer votre requête à ceci:

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

et paramètres ajouter cette façon (ou la façon que @Misnomer fait):

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

La différence importante est que vous devez changer votre CommandText.

+0

salut j'ai tnx .. ive changé mon code mais toujours im obtenir l'erreur .. cmd.CommandText = "SELECT * FROM emprunter où (Department LIKE '% @ DepartmentText%')" cmd.Parameters.Add ("@ Département", SqlDbType.VarChar) cmd.Parameters.AddWithValue ("@ DepartmentText", TextBox2.Text erreur "La requête paramétrée" (@ Parameter1 nvarchar (4000), @ Department varchar (8000), @ Departmen 'attend le paramètre' @ Parameter1 ', qui n'a pas été fourni. " – demic0de

+0

Je soupçonne que votre erreur est lancée depuis un autre endroit Pouvez-vous poster votre trace de pile? –

+0

Vous pouvez également mettre à jour votre question avec votre code mis à jour? –

-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

Pas d'explication? Ce n'est pas une bonne réponse. –

Questions connexes