从 ASP.NET WebService 查询 SQL 服务器时缺少结果
Missing results when querying SQL Server from ASP.NET WebService
伙计们,我几乎已经尝试了我所知道的一切以及我可以实现的所有可能性...
发生的事情是,当我通过 proc 或 commandtext 制作此 select 时,我的数据读取器 returns 只有 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
.
作为你的主要问题是打电话
dataReader.Read()
两次。看看这个 related question 看看如何使用 SqlDataReader.Read()
方法。
此外,您无需调用 dataReader.Close();
,因为它会在您的 using block.
结束时自动处理掉
伙计们,我几乎已经尝试了我所知道的一切以及我可以实现的所有可能性...
发生的事情是,当我通过 proc 或 commandtext 制作此 select 时,我的数据读取器 returns 只有 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
.
作为dataReader.Read()
两次。看看这个 related question 看看如何使用 SqlDataReader.Read()
方法。
此外,您无需调用 dataReader.Close();
,因为它会在您的 using block.