En mi aplicacion tengo un textbox donde meto un numero y al pulsar sobre el boton me ejecuta una query que busca aquellas filas de la bbdd que empiecen por esa cifra.
la query es esta y funciona bien ya que la he probado en access (bbdd que uso):
Código XML:
Ver original
<DbSource ConnectionRef="WALTConnectionString2 (Web.config)" DbObjectName="VOLATIL" DbObjectType="Table" FillMethodModifier="Public" FillMethodName="FillGet_partvolatilopt" GenerateMethods="Both" GenerateShortCommands="true" GeneratorGetMethodName="Get_partvolatilopt" GeneratorSourceName="FillGet_partvolatilopt" GetMethodModifier="Public" GetMethodName="Get_partvolatilopt" QueryType="Rowset" ScalarCallRetval="System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" UseOptimisticConcurrency="true" UserGetMethodName="Get_partvolatilopt" UserSourceName="FillGet_partvolatilopt"> <SelectCommand> <DbCommand CommandType="Text" ModifiedByUser="true"> <CommandText>SELECT id_part, id_pl, pn, rma, OPTcase, qty, status, dir_cliente, employee_number, warehouse, piki, loaded_type FROM VOLATIL WHERE ([OPTcase] LIKE ?)</CommandText> <Parameters> <Parameter AllowDbNull="true" AutogeneratedName="Param1" ColumnName="OPTcase" DataSourceName="VOLATIL" DataTypeServer="DbType.StringFixedLength(50)" DbType="String" Direction="Input" ParameterName="OPTcase" Precision="0" ProviderType="WChar" Scale="0" Size="50" SourceColumn="OPTcase" SourceColumnNullMapping="false" SourceVersion="Current" /> </Parameters> </DbCommand> </SelectCommand> </DbSource>
Y os dejo también el código de la aplicación donde inserto el texto y realizo la llamada a la query:
Servidor:
Código C#:
Ver original
protected void But_PartsByOPT_Click(object sender, EventArgs e) { //show parts found by OPTcase. VOLATILBLL volatil = new VOLATILBLL(); VOLATILTO pieza = new VOLATILTO(); string optcase_aux = TB_PartsByOPT.Text + "*"; int cont = volatil.getpartvolatilopt(optcase_aux).Count; ODS2.SelectParameters.Clear(); ODS2.SelectMethod = "getpartvolatilopt"; ODS2.TypeName = "VOLATILBLL"; Parameter para = new Parameter("OPTcase", TypeCode.String); para.DefaultValue = TB_PartsByOPT.Text + "*"; ODS2.SelectParameters["OPTcase"] = para; lbl_id_pl.Text = "Contador numero de piezas en volatil: " + cont + " y su parametro de entrada es: " + para.DefaultValue; lbl_id_pl.Visible = true; GridView2.DataBind(); GridView2.Visible = true; if (GridView2.Rows.Count == 0) { txtBox_optcase.Text = TB_PartsByOPT.Text; addpart.Visible= true; lbl_parts_search.Visible = false; Button2.Visible = false; Button4.Visible = false; } else { Button2.Visible = true; Button4.Visible = true; lbl_parts_search.Text = "This OPTcase has the following parts in our database. If your part is among them, select and confirm. If not, click (Add manual) to add a new part."; lbl_parts_search.Visible = true; } }
Código ASP:
Ver original
<asp:ObjectDataSource ID="ODS2" runat="server" SelectMethod="getpartvolatilopt" TypeName="VOLATILBLL"> <SelectParameters> <asp:Parameter DefaultValue="" Name="OPTcase" Type="String" /> </SelectParameters> </asp:ObjectDataSource> <asp:Panel ID="pnl_SearchByPart" runat="server" Visible="false" > <div class="divModul"> <h2>Add Part:</h2> <table class="style1" frame="void" border="10" rules="rows"> <tr> <td> OPTcase</td> <td> <asp:TextBox ID="TB_PartsByOPT" runat="server"></asp:TextBox> </td> <td> <asp:Button ID="But_PartsByOPT" runat="server" onclick="But_PartsByOPT_Click" Text="Search" /> </td> </tr> </table> </div> </asp:Panel>
Decir que al pasarle como parámetro el textbox lo concateno con un * para que la query busque los que empiecen por eso, así pues el parámetro de búsqueda quedaría: "TextBox.text*".
¿Alguien sabe por que no me funciona? Si quito el * solo me encuentra los que son iguales.
Muchas gracias
Un saludo