gpt4 book ai didi

mysql - 调用存储过程对数组执行计数

转载 作者:行者123 更新时间:2023-11-29 14:27:23 26 4
gpt4 key购买 nike

我从 IT_Cases_List 中选择一个不同的用户,并将其存储在 arraystaff() 中。然后,我将从此数组中调用存储过程来计算该用户参与的案例数量(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 运行查询,这就是我应该得到的 enter image description here

我注意到计数数字重复了 (7,7,20,20,49,49,5) 而不是 (7,20,49,5,10,27,13)

谁能告诉我我做错了什么吗?

最佳答案

您应该只调用 getCases() 一次,因为其中每个人员都有一个循环 (arraystaff)。另外,您能为我们提供有关该问题的更多信息吗?例如。示例记录、所需的输出,以便我们为您提供更多帮助:)

更新1

ds = New DataSet移至For循环之前,并将Command对象传递给DataAdapter对象>.

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

关于mysql - 调用存储过程对数组执行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10679516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com