2016-11-29 43 views
0

伙计们,请我已经试过几乎所有的东西我知道,我也可以实现所有的可能性...失踪结果查询从ASP.NET的WebService SQL Server时

会发生什么事是,当我做出这个选择通过PROC或commandtext,我的数据读取器只返回3条记录,但是我有7个数据库与这些参数。 如果我将这3个标记为已读,并发出新的请购单,则只会将2个发回给我。同样,如果只有一个,最后一个永远不会被带回给我。

这里是我的代码

public List<Documentos> GetDocumentosDisponiveisParaMotorista(string motoristaCpf, string veiculoPlaca, 
     long transportadora) 
    { 
     var retorno = new List<Documentos>(); 

     var command = Banco.GetStoredProcCommand("dbo.SelectDocumentos"); 
     AddInParameter(command, "@MotoristaCpf", motoristaCpf); 
     AddInParameter(command, "@VeiculoPlaca", veiculoPlaca.ToUpper()); 
     AddInParameter(command, "@TransportadoraId", transportadora); 

     //var command = Banco.GetSqlStringCommand("SELECT " + 
     //          "TransportadoraId" + 
     //          ", FilialSigla" + 
     //          ", TipoDocumentoId" + 
     //          ", Documento" + 
     //          ", DocumentoSerie" + 
     //          ", MotoristaCpf" + 
     //          ", VeiculoPlaca" + 
     //          ", DocumentoChave" + 
     //          ", DocumentoTransporte" + 
     //          ", TipoDocTransporte" + 
     //          ", NumeroNotaFiscal" + 
     //          ", DestinatarioCpfCnpj" + 
     //          ", LocalEntregaId" + 
     //          ", StatusId" + 
     //          ", Comprovante" + 
     //          ", Transmitido" + 
     //          ", TransmitidoData" + 
     //          ", DataCadastro" + 
     //          ", DataAlteracao " + 
     //          "FROM Documentos WITH(NOLOCK) " + 
     //          "WHERE MotoristaCpf = @MotoristaCpf " + 
     //          "AND VeiculoPlaca = @VeiculoPlaca " + 
     //          "AND TransportadoraId = @TransportadoraId " + 
     //          "AND Transmitido is null "); 

     //command.Parameters.Add(new SqlParameter("@MotoristaCpf", SqlDbType.NVarChar, 11, "MotoristaCpf")); 
     //command.Parameters.Add(new SqlParameter("@VeiculoPlaca", SqlDbType.NVarChar, 7, "VeiculoPlaca")); 
     //command.Parameters.Add(new SqlParameter("@TransportadoraId", SqlDbType.BigInt, 999999999, "TransportadoraId")); 

     //command.Parameters["@MotoristaCpf"].Value = motoristaCpf; 
     //command.Parameters["@VeiculoPlaca"].Value = veiculoPlaca.ToUpper(); 
     //command.Parameters["@TransportadoraId"].Value = transportadora; 
     //command.Connection = Banco.CreateConnection(); 
     //command.Connection.Open(); 
     //command.CommandTimeout = 3600; 

     using (var dataReader = Banco.ExecuteReader(command)) 
     { 
       while (dataReader.Read()) 
       { 
        retorno.Add(dataReader.Read() ? Preencher(dataReader) : null); 
       } 

       dataReader.Close(); 

     } 
     return retorno; 
    } 

我使用SQL Server 2005中这是在asp.net C#WebService的代码。我的连接是使用连接字符串进行的。我不使用NHibernate,我正在使用Microsoft.Practices.EnterpriseLibrary.Data

+2

您正在推进阅读器两次,调用'Read()'两次。不要这样做。 – Crowcoder

回答

1

由于Crowcoder mentions in the comments您的主要问题是拨打 dataReader.Read()两次。看看这related question看看如何使用SqlDataReader.Read()方法。

此外,您无需致电dataReader.Close();,因为它将在using block的末尾自动处理。

+0

谢谢你们,也是这样,但是,这给了另一个问题,但艾尔雷迪解决了谢谢 –