0

distinct userから選択してIT_Cases_List、に保存していarraystaff()ます。次に、この配列からaを呼び出して、このStored Procedure ユーザーが参加したケースの数をカウントし、(arraystaff(i)) arraystaff.length-1までループします。

しかし、問題は、カウントが集計されないことです。

Sub getStaff(ByVal month As String)
    If Not con.State = ConnectionState.Closed Then
        con.Open()
    End If
    Dim s As String = "select distinct Attended_by from IT_Cases_List where month(Resolution_date) ='" & month & "' "
    s = s & "And Year(Resolution_date) ='" & ddyear.SelectedValue & "' and Attended_by is not null "
    cmd = New SqlCommand(s, con)
    da = New SqlDataAdapter
    ds = New DataSet
    da.SelectCommand = cmd
    da.Fill(ds)
    If ds.Tables(0).Rows.Count > 0 Then
        staffcount = ds.Tables(0).Rows.Count
        ReDim arrstaff(staffcount - 1)
        For Me.i = 0 To staffcount - 1
            arrstaff(i) = ds.Tables(0).Rows(i).Item("Attended_by")
        Next
            getCases()
     End If
End Sub

Sub getCases()
    If con.State = ConnectionState.Closed Then
        con.Open()
    End If

    ReDim arrdata(arrstaff.Length - 1, 0)
    For Me.i = 0 To arrstaff.Length - 1
        cmd = New SqlCommand("get_cases", con)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Add("@ename", SqlDbType.VarChar).Value = arrstaff(i)
        cmd.Parameters.Add("@Yr", SqlDbType.VarChar).Value = ddyear.SelectedValue
        cmd.Parameters.Add("month", SqlDbType.VarChar).Value = m

        cmd.ExecuteNonQuery()
        da = New SqlDataAdapter()
        da.SelectCommand = cmd
        ds = New DataSet
        da.Fill(ds)

        If Not IsDBNull(ds.Tables(0).Rows(i).Item("NoCase")) Then
            arrdata(i, 0) = ds.Tables(0).Rows(i).Item("NoCase")
        End If
    Next

    cmd = New SqlCommand("delete from cases_Temp", con)
    cmd.ExecuteNonQuery()
    con.Close()
End Sub

これが私のストアドプロシージャです

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[get_cases](
@Ename  varchar(100),
@Yr varchar(50),
@month varchar(30))

 AS
BEGIN
declare @NoCase as int

select @NoCase=COUNT(*)
from IT_Cases_List
where Attended_by= @Ename and month(Resolution_date) =@month and 
Year(Resolution_date)=@Yr and Attended_by is not null 


insert into cases_temp(Ename,NoCase)
values(@Ename,@NoCase)

select * from cases_Temp

end

何を間違えたのかわかりません。どんな助けでも大歓迎です。

アップデート

わかりました、私は一度だけ電話をしましたgetcases、しかし私はまだ同じ問題を抱えています。

これは私がプログラムを実行したときに私が得るものです:

http://imgur.com/dkhmU

データベースからCount(*)を取得した場合、取得する必要のあるケースの総数は132ですが、プログラムから取得したケースの総数は157(7 + 7 + 20 + 20 + 49 + 49 + 5)です。

SQLからクエリを実行すると、これが取得されるはずです ここに画像の説明を入力してください

カウント数が(7,20,49,5,10,27,13)ではなく(7,7,20,20,49,49,5)重複していることに気付きました

誰かが私が間違ったことを教えてもらえますか?

4

1 に答える 1

1

内部には各譜表 ( arraystaffgetCases() )のループがあるため、一度だけ呼び出す必要があります。もう 1 つ、問題についてもう少し情報を提供していただけますか。例えば。サンプル レコード、必要な出力を提供して、さらに支援できるようにします :)

更新 1

ds = New DataSetを For ループの前に移動し、をに渡します。Command ObjectDataAdapter Object

Sub getCases()
    If con.State = ConnectionState.Closed Then
        con.Open()
    End If

    ReDim arrdata(arrstaff.Length - 1, 0)

    ds = New DataSet
    For Me.i = 0 To arrstaff.Length - 1

        cmd = New SqlCommand("get_cases", con)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Add("@ename", SqlDbType.VarChar).Value = arrstaff(i)
        cmd.Parameters.Add("@Yr", SqlDbType.VarChar).Value = ddyear.SelectedValue
        cmd.Parameters.Add("month", SqlDbType.VarChar).Value = m

        da = New SqlDataAdapter(cmd)
        da.Fill(ds)

        If Not IsDBNull(ds.Tables(0).Rows(i).Item("NoCase")) Then
            arrdata(i, 0) = ds.Tables(0).Rows(i).Item("NoCase")
        End If

    Next

    cmd = New SqlCommand("delete from cases_Temp", con)
    cmd.ExecuteNonQuery()
    con.Close()
End Sub
于 2012-05-21T05:13:54.020 に答える