tipo - sqlcommand vb net
La consulta parametrizada espera el parámetro que no se suministró (5)
Aprovechando y simplificando la answer de ravidev:
La taquigrafía de VB.NET es
cmd.Parameters.AddWithValue("@Department", IF(TextBox2.Text, DBNull.Value))
La taquigrafía de C # es
cmd.Parameters.AddWithValue("@Department", TextBox2.Text ?? DBNull.Value)
Tengo un problema con mi código:
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()
Una vez que escribí la cadena en el cuadro de texto para buscar un elemento, recibí este error:
La consulta parametrizada ''(@ Parameter1 nvarchar (4000)) SELECT * FROM toma prestado donde (Departme'' espera el parámetro ''@ Parameter1'', que no fue suministrado.
¿Alguien puede ayudarme?
Intenta agregar parameters como este -
cmd.Parameters.Add("@Department", SqlDbType.VarChar)
cmd.Parameters("@Department").Value = TextBox2.Text
y cambie su texto de comando a lo que dice @Abe Miessler, él tiene razón, pensé que lo resolvería.
Si pasa valor nulo al parámetro, obtendrá este error incluso después de agregar el parámetro, intente verificar el valor y, si es nulo, utilice DBNull.Value
Esto funcionará
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
Esto convertirá los valores nulos de la capa de objeto en valores DBNull que sean aceptables para la base de datos.
Su sitio web está en grave peligro de ser pirateado.
Lea sobre Inyección SQL y cómo prevenirlo en .NET
Su problema de consulta es la menor de sus preocupaciones en este momento.
Pero.....
La solución de @Momnomer está cerca, pero no del todo:
Cambie su consulta a esto:
cmd.CommandText = "SELECT * FROM borrow where (Department LIKE ''%@DepartmentText%'')"
y agregue parámetros de esta manera (o la forma en que @Misnomer lo hace):
cmd.Parameters.AddWithValue("@DepartmentText",TextBox2.Text)
La diferencia importante es que necesita cambiar su CommandText.
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";