Как повторно подключиться к работающему набору данных хранимых процедур? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть сохраненный процесс, который может занять до часа, чтобы заполнить большие объемы данных. Если пользователь закрывает браузер и возвращается на эту страницу, я запускаю проверку, чтобы убедиться, что сохраненный процесс все еще работает. Если это так, не позволяйте им создавать другое соединение с хранимым процессом, но лучше подключитесь к существующему набору данных процесса.

Я передаю employeeId и companyId и проверяю время завершения сохраненного процесса, чтобы определить, завершен ли он. Если это не так, то я не вызываю метод для запуска другого соединения. Вместо этого я хотел бы иметь возможность каким-то образом повторно подключиться и извлечь данные из исходного вызова в БД.

Protected Sub btnValidateRule_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnValidateRule.Click
    Dim guid As Guid = Guid.NewGuid()
    Session.SessionId = guid.ToString
    Dim isComplete As Boolean = CheckRunningProgress()

    If isComplete = True Then
       GetEmployeeByRule(Session.SessionId)
    End If
End Sub

    Private Function CheckRunningProgress() As Boolean
        Dim elig As New Obj.Eligibility()
        Dim sqlFilter As String = String.Empty
        Dim company As New Obj.Company()
        Dim dsRunningProcess As DataSet = company.Get_Current_Running_Process_By_Session(Session.AdminId, Session.CompanyId)
        If dsRunningProcess.Tables(0).Rows.Count > 0 Then
            Dim currentCount As Integer = 0
            Dim totalExpected As Integer = 0
            Dim percent As Integer = 0
            Dim endTime As String = ""

            endTime = dsRunningProcess.Tables(0).Rows(0)("EndTime").ToString()
            currentCount = dsRunningProcess.Tables(0).Rows(0)("CurrentCount")
            totalExpected = dsRunningProcess.Tables(0).Rows(0)("TotalExpected")
            percent = (currentCount / totalExpected) * 100
            If percent <> 100 AndAlso endTime = "" Then
                Return False
            End If
        Else
            Return True
        End If
    End Function
    Private Sub GetEmployeeByRule(ByVal sessionId As String)
        Dim elig As New Obj.Eligibility()
        Dim sqlFilter As String = String.Empty
        Dim company As New Obj.Company()
        Dim typeID As Integer = 0
        Dim totalEmployees As Integer = 0
        Dim failedEmployees As Integer = 0
        Dim passedEmployees As Integer = 0
        sqlFilter = elig.Get_EligibilityRule_Filter(ViewState("EligibilityRule_ID"), sqlFilter)
        Dim dsEmps As DataSet = company.Get_All_Employees(Session("Company_ID"))
        totalEmployees = dsEmps.Tables(0).Rows.Count
        Dim dsEmpsByRule As DataSet = company.Get_All_Employees_By_Rule(Session("Company_ID"), sqlFilter, Session.AdminId, typeID, sessionId)



        For Each dsRow As DataRow In dsEmpsByRule.Tables(0).Rows
            If dsRow("Status").ToString.Trim.ToLower.Equals("passed") Then
                passedEmployees += 1
            Else
                failedEmployees += 1
            End If
        Next
        Dim dtEmpsByRule As DataTable = dsEmpsByRule.Tables(0)
        dtEmpsByRule.DefaultView.Sort = "Status DESC"
        EmployeesGrid.DataSource = dtEmpsByRule
        EmployeesGrid.DataBind()
        lblTotalEmps.Text = "Employees Tested: " + totalEmployees.ToString() + " | Passed: " + passedEmployees.ToString() + " | Failed: " + failedEmployees.ToString()
    End Sub

В таком виде я получаю ложную ошибку, возвращаемую из CheckRunningProcess (), которая верна, но затем подпрограмма просто завершается и завершается. Я хотел бы как-то подключиться к существующим сохраненным результатам набора данных proc и вернуть их. Таким образом, пользователи могут выходить и возвращаться к длительным вызовам БД.

...