1

Estoy realizando una consulta simple a DB y me da el error del título.

Me indica que el error está en el if(reader.Read())

Tengo esto en el aspx:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>" `
SelectCommand="SELECT [Articulos].[codigo], [Articulos].[descripcion], [Articulos].[precio], [Articulos].[codigoRubro], [Rubros].[descripcion]
FROM [Articulos] JOIN [Rubros] ON [Articulos].[codigoRubro] = [Rubros].[codigo] WHERE [Articulos].[descripcion]=@descripcion">
        <SelectParameters>
            <asp:Parameter Name="codigo" />
            <asp:Parameter Name="descripcion" />
            <asp:Parameter Name="precio" />
            <asp:Parameter Name="codigoRubro" />
            <asp:Parameter Name="descripcionRubro" />
        </SelectParameters>
    </asp:SqlDataSource>

y esto en el cs:

try
{
    SqlDataSource1.SelectParameters["descripcion"].DefaultValue = txbxArticleName.Text.ToUpper().Trim();
    SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataReader;
    SqlDataReader reader = (SqlDataReader)SqlDataSource1.Select(DataSourceSelectArguments.Empty);

    **if (!reader.Read())
    {**
        panelResult.Visible = true;

        txbxNameResult.Text = reader["descripcion"].ToString().Trim();
        txbxCodeResult.Text = reader["codigo"].ToString().Trim();
        txbxPriceResult.Text = reader["precio"].ToString().Trim();
        txbxProductCodeResult.Text = reader["codigoRubro"].ToString().Trim();
    }

Obviamente, esto se debe a que reader es null. Por eso, mi pregunta es: ¿por qué es null y cómo puedo solucionarlo?

Joam Delgado
  • 45
  • 1
  • 3
  • 11
  • SqlDataReader reader = null Cuando el if hace su validación (que sabemos es booleana, explota el error indicado la excepción) no sé por qué es null ni sé como solucionarlo – Joam Delgado Mar 31 '17 at 14:22
  • en el SqlDataSource defiens varios parametros, pero desde codigo solo asignas "descripcion" y el resto ? puede que en realidad estes teniendo un exception pero no salta al catch. Valida en el VS la opcion Exceptions, segun el VS cambia de lugar pero deberia estar dentro del menu de Debug – Leandro Tuttini Mar 31 '17 at 17:12
  • 1
    ese select devuelve algo? – gbianchi Mar 31 '17 at 17:16
  • Es parametro descripcion es para hacer la busqueda. Fijate: la idea es que si devuelve información, asigne los encontrados a los ´texboxResult´, sino envía un mensaje, pero hasta el momento siempre ha indicado ´null´ – Joam Delgado Mar 31 '17 at 18:01

1 Answers1

0

Si revisas la documentacion

SqlDataSource.Select Method

podrias obtener un DataView, usando:

DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);

if (dv.Table.Rows.Count > 0){
   var row = dv.Table.Rows[0];

   txbxNameResult.Text = row["descripcion"].ToString().Trim();
   //resto
}

de esta forma validas si el command y los datos puedes recuperarse, o si el problema es algo mas general

Leandro Tuttini
  • 35,380
  • 3
  • 13
  • 40
  • Cuando se asigna esta propiedad `SqlDataSource1.DataSourceMode = SqlDataSourceMode.DataReader;` se le está indicando a `SqlDataSource1` que retorne un `DataReader`. o sea que el código esta bien planteado. – Weimar Yamit Moreno Perez Mar 31 '17 at 15:47
  • Es verdad el DataSourceMode permite definir el reader, pero seria buena idea intentar obtener al menos el DataView para ver si el problema lo genera el reader o no – Leandro Tuttini Mar 31 '17 at 15:53
  • De acuerdo a la documentacion es un objeto 'IDataReader' que de acuerdo a la documentacion es una interfaz en lugar de un objeto 'DataReader' y la forma en que Leandro ejemplifica el codigo es la forma en que se ejemplifica en la documentación de MS: https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.select(v=vs.110).aspx – Jesus Rodríguez Mar 31 '17 at 15:55
  • Agradezco la colaboración He realizado los cambios usando la propuesta de Leandro y ahora el "dv" me da null tambien... todavía no logro determinar donde está el error – Joam Delgado Mar 31 '17 at 16:49
  • Edité la pregunta para mejorar la óptica – Joam Delgado Mar 31 '17 at 16:59