Sql server SQL过程返回标准查询的行,但不返回应用程序查询

Sql server SQL过程返回标准查询的行,但不返回应用程序查询,sql-server,vb.net,Sql Server,Vb.net,这是一个奇怪的过程,我有一个程序: @ProjectId INT, @ChecksheetId INT, @QualId INT, @includeDeleted BIT = 0 AS BEGIN SELECT CheckSheetQual.CheckSheetQualId, CheckSheetQual.CheckSheetQualSheetId, CheckSheetQual.CheckSheetQualQualId, CheckSheetQual.CheckSheetQualPro

这是一个奇怪的过程,我有一个程序:

@ProjectId INT,
@ChecksheetId INT,
@QualId INT,
@includeDeleted BIT = 0

AS

BEGIN

SELECT  CheckSheetQual.CheckSheetQualId, CheckSheetQual.CheckSheetQualSheetId, CheckSheetQual.CheckSheetQualQualId, CheckSheetQual.CheckSheetQualProjectId, CheckSheetQual.CheckSheetQualAddedById, CheckSheetQual.CheckSheetQualAddedAt,
        CheckSheetQual.CheckSheetQualDeleted, CheckSheetQual.CheckSheetQualDeletedById, CheckSheetQual.CheckSheetQualDeletedAt,
        Quals.QualsTitle, Quals.QualsDesc, Quals.QualsDuration, DeletedUser.UserFullName AS CheckSheetQualDeletedBy,
        CheckSheetQual.CheckSheetQualAddedBy, Project.ProjectDesc, Checksheet.CheckSheetName, CheckSheetDescription, CheckSheetRevision, 
        Discipline.DisciplineRef, L_CheckTypeDesc
FROM    dbo.[ChecksheetQual] INNER JOIN
        dbo.Quals ON ChecksheetQual.CheckSheetQualQualId = Quals.QualsID INNER JOIN
        dbo.Checksheet ON Checksheet.ChecksheetId = ChecksheetQual.ChecksheetQualSheetId INNER JOIN
        dbo.Discipline ON Checksheet.ChecksheetDiscipline = Discipline.DisciplineId INNER JOIN
        dbo.L_CheckType ON Checksheet.CheckSheetType = L_CheckType.L_CheckTypeId INNER JOIN
        dbo.Project ON ChecksheetQual.ChecksheetQualProjectId = Project.ProjectId LEFT JOIN
        dbo.[User] AS DeletedUser ON ChecksheetQual.CheckSheetQualDeletedById = DeletedUser.UserId
WHERE   
        dbo.Project.ProjectId = @ProjectId
AND
        (dbo.CheckSheetQual.CheckSheetQualSheetId = @ChecksheetId)
AND

        (dbo.CheckSheetQual.CheckSheetQualDeleted = @includeDeleted)
select语句是一个巨大的语句,我知道,但它可以被忽略,因为我知道它是有效的,我会告诉你为什么

现在,让我们假设我想要将includeDeleted设置为1的已删除项,因此,在sql manager中,我运行以下查询:

EXEC dbo.prc_ChecksheetQual_Get_List @ProjectId = 1, @ChecksheetId = 378, @QualId = 0,  @includeDeleted = 1;
GO
结果与预期的一样,返回了正确的行,实际上有3行

现在让我们假设我想在应用程序中执行相同的操作:

 Dim sqlConn As New SqlConnection(Me.Variables.ConnectionString)
        Dim sqlComm As New SqlCommand
        Dim sqlDR As SqlDataReader = Nothing

        Try
            With sqlComm
                .CommandText = "prc_ChecksheetQual_Get_List"
                .CommandType = CommandType.StoredProcedure
                .CommandTimeout = Me.Variables.CommandTimeout
                .Connection = sqlConn
                .Parameters.Clear()
                .Parameters.Add("@ProjectId", SqlDbType.Int).Value = 1
                .Parameters.Add("@ChecksheetId", SqlDbType.Int).Value = 378
                .Parameters.Add("@QualId", SqlDbType.Int).Value = 0
                .Parameters.Add("@includeDeleted", SqlDbType.Bit).Value = 1
            End With

            If sqlConn.State <> ConnectionState.Closed Then sqlConn.Close()
            sqlConn.Open()
            sqlDR = sqlComm.ExecuteReader(CommandBehavior.CloseConnection)

            If sqlDR.HasRows Then
                list = New List(Of ChecksheetQualCLS)
                While sqlDR.Read
                    list.Add(FillDataRecord(sqlDR))
                End While
            End If
返回正确的金额和正确的行。这怎么可能


我在这里完全不知所措,请帮助。

检查您是否对同一数据库运行此查询。有时连接字符串很棘手是的,这当然没问题,因为正如我最后一点所说的,如果我只是将includeDeleted设置为0,那么在应用程序中一切都会按照预期工作,我有一个类似的位值参数。试试Parameters.AddNewSqlParameter@includeDeleted,SqlDbType.Bit和cmd.Parameters[@includeDeleted].Value=1,另一行。不是说您应该保持这种方式,只是测试一下这是否与我遇到的问题相同。我不想坚持,但将includeDeleted设置为0并不排除这样一个事实,即您连接到另一个数据库时,使用的行数与deleted标志的行数完全相同。您的连接字符串是什么?选中该字符串,选择正确的数据库=
.Parameters.Add("@includeDeleted", SqlDbType.Bit).Value = 0