Vb.net 异常未处理System.IndexOutOfRangeException

Vb.net 异常未处理System.IndexOutOfRangeException,vb.net,Vb.net,此代码用于查看已发布的咨询计划。不幸的是,我一直坚持使用if语句。错误发生在第行:如果dr(“讲师”)=ComboBox2.SelectedItem,则| |我使用一个组合框来显示数据库中的数据,这意味着组合框中有一个项目列表,我将选择任何讲师,使其显示在表单中。我有一个数据库,其中包含发布的时间表,如图所示。存储在这里(数据库)的所有数据实际上都不可用(声明为red=不可用,lime=可用),但可用数据未存储在数据库中。所以,我现在要做的是读取并匹配数据库中的“时间”、“可用时间”和“讲师”,

此代码用于查看已发布的咨询计划。不幸的是,我一直坚持使用if语句。错误发生在第行:如果dr(“讲师”)=ComboBox2.SelectedItem,则| |我使用一个组合框来显示数据库中的数据,这意味着组合框中有一个项目列表,我将选择任何讲师,使其显示在表单中。我有一个数据库,其中包含发布的时间表,如图所示。存储在这里(数据库)的所有数据实际上都不可用(声明为red=不可用,lime=可用),但可用数据未存储在数据库中。所以,我现在要做的是读取并匹配数据库中的“时间”、“可用时间”和“讲师”,然后将其更改为(红色)并添加到相应的标签中(用石灰色)


您正在从第一个SQL命令中选择记录,但随后立即丢弃这些记录并用第二个SQL命令的结果替换它们:

dr = cmd.ExecuteReader
dr = cmd2.ExecuteReader
第二个命令没有名为
“讲师”
的字段,它只是一个
COUNT()

看起来您想要的是完全删除这一行:

dr = cmd2.ExecuteReader
因为您已经执行了上面的
cmd2
,并将该值存储在
count
变量中


还请注意,您的循环不是必需的:

For i = 1 To count
    If (i = 1) Then
        '...
    End If
Next

根据设计,此循环将只迭代一次。因此,您首先不需要循环,只需根据需要执行一次代码。

您从第一个SQL命令中选择记录,然后立即丢弃它们并用第二个SQL命令的结果替换它们:

dr = cmd.ExecuteReader
dr = cmd2.ExecuteReader
第二个命令没有名为
“讲师”
的字段,它只是一个
COUNT()

看起来您想要的是完全删除这一行:

dr = cmd2.ExecuteReader
因为您已经执行了上面的
cmd2
,并将该值存储在
count
变量中


还请注意,您的循环不是必需的:

For i = 1 To count
    If (i = 1) Then
        '...
    End If
Next

根据设计,此循环将只迭代一次。因此,您首先不需要循环,只需根据需要执行一次代码。

您正在SQL查询中选择一个无名值:
选择COUNT(*)
,然后尝试读取一个名为“讲师”的值:
dr(“讲师”)
。该SQL查询不返回名为“讲师”的值。因此,索引(
“讲师”
)超出了该查询结果的范围。我明白了,您是否介意给我一点指导,因为我不太确定在:Select COUNT(*)语句中替换什么。您正在SQL查询中选择一个无名值:
Select COUNT(*)
,然后尝试读取一个名为“讲师”:
dr(“讲师”)
。该SQL查询不返回名为“讲师”的值。因此索引(
“讲师”
)超出了该查询结果的范围。我明白了,您是否介意给我一点指导,因为我不太确定在该查询中替换什么:选择计数(*)好的,现在我可以查看表单中的数据了,但是现在它只显示第一行和第一列(1x1)红色的是,其他所有人都呆在石灰上,好像没有什么变化,我刚刚编辑了代码。请在我的帖子下查看。好的,现在我可以在我的表单中查看数据,但现在它只显示第一行和第一列(1x1)红色的,其他所有人都呆在莱姆,好像什么都没变,我刚刚编辑了代码。请在我的帖子下查看。