2016-11-29 16 views
0

みんなからSQL Serverを照会するとき、私はほとんど私が知っているすべてと私は実装することができ、すべての可能性を試してみたください...ミッシング結果ASP.NET Webサービス

かcommandtext、私のdatareaderは3レコードだけを返しますが、私はそれらのパラメータを持つデータベース上に7を持っています。 これらの3つを読んでマークし、新しい請求を作成すると、2つだけが返されます。唯一のものがあれば同じ、最後のものは決して戻って来ない。

は、ここで私はこれは、asp.netのC#でWebサービスのコードでSQL Serverの2005を使用しています私のコード

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; 
    } 

です。私の接続はconnectionstringを使って行われます。私はNHibernateを使用せず、私はMicrosoft.Practices.EnterpriseLibrary.Dataを使用しています。

+2

あなたは読者を2回進めて 'Read()'を2回呼び出しています。それをしないでください。 – Crowcoder

答えて

1

Crowcoder mentions in the commentsあなたの主な問題は dataReader.Read()を2回呼び出しています。 SqlDataReader.Read()メソッドの使用方法については、related questionをご覧ください。

さらに、それは自動的にあなたのusing blockの終わりに処分されるように、あなたがdataReader.Close();コールするために必要はありません。

+0

あまりにもありがとう、それはそれでしたが、それは別の問題を与えるが、alredyは感謝を解決 –