Estoy tratando de usar un SqlDataAdapter para llenar una tabla de datos, que puedo utilizar como origen de datos para un control DataGrid. La consulta está bien, al menos cuando lo ejecuto manualmente en SSMSE. Cuando hago la operación de relleno, en la tabla que se presenta a la derecha de las columnas, pero no hay filas. La parte más frustrante de esto es que el código es idéntico (con una consulta diferente) en una página diferente. No puedo publicar la consulta, pero mi código de inicialización se parece a esto:

SqlCommand areaDAC = new SqlCommand (areaQuery, connection);
areaDAC.Parameters.Add (new SqlParameter ("@param", System.Data.SqlDbType.NVarChar, 50));
m_areaDataAdapter = new SqlDataAdapter (areaDAC);

A continuación, utilizarlo:

m_areaDataAdapter.SelectCommand.Parameters["@param"].Value = "Filter Val";
DataTable table = new DataTable ();
m_areaDataAdapter.Fill (table);

En este punto, la tabla tiene el número correcto de las columnas y no hay filas. Sé que los parámetros se ha añadido correctamente, sé que existen datos para la consulta dada.

Actualización (proporcionado por Nik en un comentario):

SELECT * FROM 
   (SELECT 
       ROW_NUMBER() OVER(ORDER BY DateAndTime DESC) AS rowNum, 
       areaName, stationName, lineName, DateAndTime, 
       Element, Description 
    FROM 
       sdrReportArea, sdrReportStation, sdrReportTLine, 
       SDRSequenceEvents, SDRSequenceStates 
    WHERE 
       sdrReportArea.areaID = sdrReportStation.stationID 
       AND sdrReportStation.stationID = sdrReportTLine.stationID 
       AND sdrReportTLine.lineID = SDRSequenceEvents.LineID 
       AND SDRSequenceEvents.StateID = SDRSequenceStates.StateID 
       AND DateAndTime >= @startDate AND DateAndTime <= @endDate 
       AND areaName = @area) AS TempTbl 
WHERE 
    rowNum BETWEEN @startRow AND @endRow;
  • Ha probado usted la consulta SQL directamente en SQL Manager? Estás captura de excepciones y examinarlas en busca de pistas?
  • Yo recomendaría que usted compruebe nuestra cadena de conexión así. Es posible que la consulta que funciona es ir a una versión diferente de la base de datos que no tiene los datos que está buscando?
  • La consulta funciona bien manualmente. La cadena de conexión es correcta y coincide con el servidor que he probado manualmente en contra. No hay excepciones cuando ejecuto el código de C#. El propósito de la rowNum columna es la ventana de los datos, sólo el 50 filas en un momento, que a su vez, funciona bien manualmente.
  • Todos los parámetros se rellenan correctamente de antemano así.
  • Por favor, actualice su pregunta con la información que has publicado en el comentario. Esto no tiene nada que ver con ASP.NET o C#, así que ¿por qué poner en el título?
  • Una recomendación: utilizar el estándar ANSI de la combinación de (INNER JOIN, LEFT OUTER JOIN etc.) y no usar esas viejo estilo «tabla1, tabla2, tabla3……» une más. Aquellos que son difíciles de leer y entender y susceptibles a unwantingly introducign un producto Cartesiano!

InformationsquelleAutor Nik | 2011-02-07

6 Comentarios

  1. 2
    1. Pruebe a quitar la fecha de parámetro de tipo en la cláusula where y prueba de nuevo.
    2. Y me enfrenté a un problema de este tipo Con dataset donde «Más» no funciona(OMI), así que supongo que no va a funcionar aquí también. El uso de Msf en su lugar si es posible.
    • No entiendo tu comentario. Yo sé acerca de las diferencias entre las consultas y SPs, pero ¿cómo sería un SP que me ayude aquí. Mi tabla termina con el derecho columnas, simplemente no hay datos.
    • Supongo que el problema real se encuentra con un simple consulta sql que utiliza Row_Number Y Más. Y me enfrenté a estas cuestiones con typeddatasets mientras se hace la paginación personalizada. Así que más tarde me mudé de que las consultas de Procedimiento Almacenado y que trabajó. Así que como he dicho si es posible, trate de colocarlo en el SP.
    • Terminó la creación de un procedimiento almacenado, aunque con que yo también tenía que pasar a mi parámetros de fecha y hora como cadenas y convertirlos en el interior de la SP.
    • «Yo también tuve que pasar mi parámetros de fecha y hora como cadenas» – sospecho que pasan como cadenas era su problema. Usted debe haber pasado como SqlDateTime. Probablemente el formato de la fecha de su cadena de no coincidir con el utilizado por la conexión.
  2. 1

    Una cosa que usted podría intentar puede ejecutar ExecuteReader y iterar a través de los resultados.

    IDataReader reader = m_areaDataAdapter.SelectCommand.ExecuteReader();
    while(reader.Read())
    {
        ...
    }

    Esto puede ayudarle a ver si el problema es con el comando, o con el objeto DataTable.

    Puedo saber los parámetros que se añaden correctamente, sé que existen datos para la consulta dada

    Cuando estés en modo de depuración, debe cuestionar todos sus supuestos, incluyendo esta. Tenga en cuenta también que al ejecutar consultas de forma manual mediante SSMSE, la conexión puede ser configurado de forma diferente (por ejemplo, valores NULOS ANSI, ANSI RELLENO) y por lo tanto dar resultados diferentes.

    EDITAR

    En respuesta a Nik del comentario, aquí están algunas sugerencias para la depuración de este.

    1. Ejecutar un código similar, pero la modificación de la consulta, de modo que no tiene ningún tipo de parámetros (es decir, el cableado a los valores de inicio/fecha de finalización de la zona, inicio/final de la fila). Si esto no funciona, entonces parece probable que la conexión puede ser configurado de forma diferente a partir de SSMSE. Si funciona, entonces …

    2. Agregar parámetros a la consulta de uno por uno hasta que se produce un error. Entonces usted será capaz de identificar los parámetros que causó el error. Probable que la moneda caerá y usted verá por qué (por ejemplo, nombre de parámetro escritos erróneamente?), si no, a publicar el código aquí.

    • ¿Cómo puedo comprobar cosas como ANSI los NULOS? El lector de datos no devolución de los datos. Yo digo que los parámetros se ha añadido correctamente porque antes de que las cosas se ejecuta, puedo comprobar los parámetros y sus valores en la memoria, y están a la derecha. Hay algo que tengo que decir explícitamente el uso de los parámetros?
  3. 1

    Solo que tenía un problema similar con OracleDataAdapter. Yo estaba tratando de hacer incluso un simple

    select * from table

    y no estaba funcionando. He terminado la creación de la

    DbCommand.CommandTimeout

    propiedad y comenzó a funcionar. Todavía estoy confundido, porque anteriormente he tenido nunca para establecer estas propiedades.

    • En su caso, de su conexión de red se agote demasiado rápido, ya sea debido a de baja de ancho de banda/rendimiento, o su servidor de DB era demasiado ocupado para llegar a, y/o proceso, el comando. Usted hizo lo correcto.
  4. 0

    Son los que usted accede a la consulta a través de un webservice que se ejecuta el ADO.NET llame? Si el servidor es la zona horaria es diferente, los valores de @Fechainicio y @EndDate no puede ser lo que usted espera.

  5. 0

    Puede ser problema entre su combinación de Múltiples Cláusula where. Usted tiene que averiguar lo que la tabla se unen en específico de IDENTIFICACIÓN es correcta o no de acuerdo con su tabla de base de datos y datos.

  6. 0

    Tuve un problema similar, aunque no sé si se aborda el OP pregunta, pero puede ayudar a alguien:

    Tuve un problema en el que estaba no hay filas devuelto y una excepción Cannot find table 0, utilizando un código similar para utilizar el adaptador para llenar un dataset (que automáticamente se crea una tabla en la base de datos).

    Relevantes fragmento de código (no se muestran OracleCommand, conexión de apertura, por simplicidad):

    DataSet ds = new DataSet();
    OracleDataAdapter oraAdp = new OracleDataAdapter();
    
    oraAdp.Fill(ds);
    return ds.Tables[0];

    Sabía que la consulta estaba enviando a través de un OracleCommand debería haber hecho el relleno y obtenido resultados – o eso creía yo. Cuando me encontré con la consulta en Oracle SQL Developer, tengo la excepción real, que era el que me había equivocado de nombre de campo en la consulta de uno de los campos. Cuando he corregido mi consulta, todos vinieron a través de bien.

Dejar respuesta

Please enter your comment!
Please enter your name here