Estoy tratando de crear una búsqueda, donde el SQL de la consulta depende de un botón y un cuadro de texto.

SELECT * FROM [Sales] WHERE (text in radio button) = (text in textbox)

¿Cómo puedo implementar esto?

A continuación es mi código completo.

Protected Sub btnSearch_Click(sender As Object, e As ImageClickEventArgs) Handles btnSearch.Click
If radClient.Checked = True Then
Dim connection As New OleDb.OleDbConnection
Dim provider As String
Dim source As String
provider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
source = "Data Source=|DataDirectory|DeltaOneMDB.mdb"
connection.ConnectionString = provider & source
GridView1.Visible = False
connection.Open()
SqlDataSource3.SelectCommand = "SELECT * FROM Sales WHERE ClientID = '" & txtSearch.Text & "'"
connection.Close()
ElseIf radItem.Checked = True Then
Dim connection As New OleDb.OleDbConnection
Dim provider As String
Dim source As String
provider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
source = "Data Source=|DataDirectory|DeltaOneMDB.mdb"
connection.ConnectionString = provider & source
GridView1.Visible = False
connection.Open()
SqlDataSource3.SelectCommand = "SELECT * FROM Sales WHERE ItemID = '" & txtSearch.Text & "'"
connection.Close()
ElseIf radUser.Checked = True Then
Dim connection As New OleDb.OleDbConnection
Dim provider As String
Dim source As String
provider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
source = "Data Source=|DataDirectory|DeltaOneMDB.mdb"
connection.ConnectionString = provider & source
GridView1.Visible = False
connection.Open()
SqlDataSource3.SelectCommand = "SELECT * FROM Sales WHERE UserID = '" & txtSearch.Text & "'"
connection.Close()
ElseIf radUser.Checked = False And radClient.Checked = False And radItem.Checked = False Then
ErrorLabel.Text = "Error: You have not chosen a search criteria."
End If
End Sub

La tabla, cuadro de texto y el botón de radio están todos en el mismo formulario. Estoy utilizando Microsoft Visual Studio 2012 para Web, y tratando de cambiar el origen de datos para un objeto GridView en el formulario. Sin embargo, sigo recibiendo el mensaje de error:

La propiedad ConnectionString no se ha inicializado.

Disculpas por no dar mi código anterior.

Gracias!

  • Lo han yout intentado hasta ahora?
  • Realmente usted debe empezar a dar algo de código donde se detuvo. Para ayudar a los que necesitamos de un contexto, los nombres de los controles, el código ya escrito, los mensajes de error. Esta pregunta es tan vaga, que será cerrado.
  • Editado mi post, gracias!
  • Acaba de salir de interés, ¿cómo se puede conseguir el texto en el botón de radio en el primer lugar? También, no estoy seguro de si tengo este derecho, pero estás comparando el texto del botón de radio para el texto del cuadro de texto? Es uno de estos elementos de texto de un campo en la base de datos?
InformationsquelleAutor Fares K. A. | 2013-03-20

3 Comentarios

  1. 2

    Mirar tu código veo un montón de líneas innecesarias. Quiero dar un ejemplo de lo que creo que se podría hacer para simplificar el código.
    En primer lugar, eliminar el código no es necesaria para el SqlDataSource (supongo que ya se ha abierto la conexión con la base de datos y que, sin embargo, esto podría hacerse sólo una vez en haga clic en entrada.
    En segundo lugar, en cada interruptor de preparar el comando a ser ejecutado y el parámetro (nombre y valor) para pasar por ese comando
    Al final de la actualización de su SqlDataSource y volver a enlazar todo

    Protected Sub btnSearch_Click(sender As Object, e As ImageClickEventArgs) Handles btnSearch.Click
    Dim sqlQuery As String
    Dim prm as String
    Dim prmValue as String
    prmValue = txtSearch.Text
    If radClient.Checked = True Then
    sqlQuery = "SELECT * FROM Sales WHERE ClientID = @clientID"
    prm = "@clientID"
    ElseIf radItem.Checked = True Then
    sqlQuery = "SELECT * FROM Sales WHERE ItemID = @itemID"
    prm = "@itemID"
    ElseIf radUser.Checked = True Then
    sqlQuery = "SELECT * FROM Sales WHERE UserID = @userID"
    prm = "@userID"
    ElseIf radUser.Checked = False And radClient.Checked = False And radItem.Checked = False Then
    ErrorLabel.Text = "Error: You have not chosen a search criteria."
    return
    End If
    SqlDataSource3.SelectCommand = sqlQuery
    SqlDataSource3.SelectParameters.Add(prm, prmValue)
    SqlDataSource3.DataBind()
    End Sub
    • Gracias @Steve! Sin embargo tengo un error en el anterior a la última pregunta: Error 1 ‘Parámetros’ no es un miembro de ‘System.Web.La interfaz de usuario.WebControls.SqlDataSource’.
    • Mi mal, fijo SqlDataSource3.SelectCommand.Parameters
    • Gracias de nuevo, @Steve! necesitamos de tu ayuda con una última cosa, por favor! Estoy atascado con un problema que no se resolverá por sí mismo, el siguiente error: La propiedad ConnectionString no se ha inicializado.
    • Supongo que tiene que establecer la propiedad ConnectionString de la SqlDataSource3 a algo. Tal vez cuando se crea el SqlDataSource en alguna otra parte del código.
  2. 1

    cuando se utiliza SQLDatasource, usted no tiene que especificar las Conexiones, gestiona su propia conexión.

    lo que usted necesita hacer es:

    1. Actualización de la Instrucción Select basado en el Botón de Radio de Estado
    2. Llamada el origen de datos DataBind Función SqlDataSource3.DataBind()

    También, el Mejor Enfoque es Utilizar el Procedimiento Almacenado que permita Valores Nulos.
    mejor para la Inyección de SQL (Amenazas para la Base de datos)

    SELECT * FROM Sales WHERE (@ClientID IS NULL OR ClientID = @ClientID)
    AND (@ItemID IS NULL OR ItemID = @ItemID )
    AND (@UserIDIS NULL OR UserID= @UserID)
    • Muchas gracias Muhammad, yazaka allah jair! Sin embargo, quisiera por favor saber cómo actualizar la instrucción Select de SQL? ¿Hice mal?
    • Usted es la mayoría de la recepción, wa yazaka. en su selección actual, que permiten una declaración a tener algo como » ¿Dónde ClientID = ‘–PRUEBA de CAÍDA de la BASE de datos de ABC;’ la Inyección de SQL es acerca de la ejecución de las instrucciones que se basan en la entrada del usuario, que puede causar daño a su solicitud y/o los servidores a través de algunos hacks. Los Procedimientos almacenados son más Seguras, bloquea las Inyecciones de SQL
  3. -1

    HORRIBLE SOLUCIONES por todas partes en internet. Este es probablemente el más simple en el mundo.

    PrintWriter out=response.getWriter();
    out.print("<html>");
    out.print("<body>");
    out.print("<form>");
    out.print("<textarea rows='5' columns='500' name='t1'></textarea>");
    //out.print("<input type='text' name='t2'>");
    //out.print("c<input type='checkbox' value='c' name='t1'>");
    //out.print("d<input type='checkbox' value='d' name='t1'>");
    out.print("<input type='submit' value='execute' name='b1'>");
    // out.print("<input type='submit' value='show' name='b1'>");
    //out.print("<input type='submit' value='query' name='b1'>");
    String a,c;
    a=request.getParameter("t1");
    //b=request.getParameter("t2");
    c=request.getParameter("b1");
    if(c!=null)
    {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/saransh","root","");
    Statement st=con.createStatement();
    if(a.startsWith("delete"))
    {
    out.print("<br>");
    out.print("delete query execution...");         
    //st.executeUpdate("insert into student2(name,address) values('"+a+"',"+b+"')") ;
    st.executeUpdate(a);
    }
    else if(a.startsWith("select"))
    {   out.print("<br>");
    out.print("select query execution...");         
    ResultSet rs=st.executeQuery(a);
    ResultSetMetaData m1=rs.getMetaData();
    out.print("<br>");
    for(int i=1;i<=m1.getColumnCount();i++)
    {String x1=m1.getColumnLabel(i);
    out.print("   "+x1);}
    out.print("<br>");//name of label               
    while(rs.next())
    {   String s0=rs.getString("Stu_roll");
    String s1=rs.getString("name");
    String s2=rs.getString("address");
    out.print(s0+"   "+s1+"   "+s2);
    out.print("<br>");  
    }}
    else if(a.startsWith("insert"))
    {   out.print("<br>");
    out.print("insert query execution...");         
    st.executeUpdate(a);
    }
    else if(a.startsWith("drop"))
    {   out.print("<br>");
    out.print("drop query execution...");           
    st.executeUpdate(a);
    }
    } catch (Exception e) {
    out.print(e);
    //TODO: handle exception
    }
    }
    out.print("&lt;/form>");
    out.print("&lt;/body>");
    out.print("&lt;/html>");

    quitar las líneas comentadas. el único problema es que las consultas son sensibles a las mayúsculas. Usted puede averiguar lo que la cadena de operación para el uso de hacer es ignorar caso’.

Dejar respuesta

Please enter your comment!
Please enter your name here