C# System.IndexAutoFrangeException:“计数器”-初学者

C# System.IndexAutoFrangeException:“计数器”-初学者,c#,sql,exception,C#,Sql,Exception,我有一个数据库,有两列,都是int类型的 一列称为id,另一列称为计数器 我正在使用SQLDataReader从数据库中读取数据 int id = (int)reader3["id"]; int counter = (int)reader3["counter"]; 第一个变量id返回列fine的id值。但是第二个变量使用System.IndexOutOfRangeException:“counter”错误停止

我有一个数据库,有两列,都是int类型的

一列称为id,另一列称为计数器

我正在使用SQLDataReader从数据库中读取数据

int id = (int)reader3["id"];                                          
int counter = (int)reader3["counter"]; 
第一个变量id返回列fine的id值。但是第二个变量使用System.IndexOutOfRangeException:“counter”错误停止执行

我无法调试此错误,因为当前上下文中不存在计数器


该错误实际上意味着您的select语句中不包含来自您选择数据的任何表的名为counter的列

所以,您需要做的是仔细检查查询是否返回一个名为counter的int类型列

与reader3关联的查询应该类似于:

select id, counter from categoryData
where .......
更新:

因此,从您更新的问题中可以清楚地看出,您没有在查询中选择计数器列,而在添加查询时,您可能没有选择计数器列,因此应该是:

SqlCommand cmd2 = new SqlCommand("SELECT id,counter FROM categoryData WHERE 
CONVERT(DATE,Date) = CONVERT(DATE,GETDATE(),103) AND category = '" +
                        categoryList[i] + "'", con);
重要注意事项! 这里还有一件很重要的事情,那就是不要在查询中进行字符串连接,而是要使用它来防止出现错误

以下是要使用参数化查询的代码:

SqlCommand cmd2 = new SqlCommand("SELECT id,couter FROM categoryData WHERE CONVERT(DATE,Date) = CONVERT(DATE,GETDATE(),103) AND category = @category",con);
cmd2.Parameters.AddWithValue("@category", categoryList[i]);   
cmd2.ExecuteNonQuery();

希望有帮助

该错误实际上意味着您的select语句中不包含从您选择数据的任何表中命名为counter的列

所以,您需要做的是仔细检查查询是否返回一个名为counter的int类型列

与reader3关联的查询应该类似于:

select id, counter from categoryData
where .......
更新:

因此,从您更新的问题中可以清楚地看出,您没有在查询中选择计数器列,而在添加查询时,您可能没有选择计数器列,因此应该是:

SqlCommand cmd2 = new SqlCommand("SELECT id,counter FROM categoryData WHERE 
CONVERT(DATE,Date) = CONVERT(DATE,GETDATE(),103) AND category = '" +
                        categoryList[i] + "'", con);
重要注意事项! 这里还有一件很重要的事情,那就是不要在查询中进行字符串连接,而是要使用它来防止出现错误

以下是要使用参数化查询的代码:

SqlCommand cmd2 = new SqlCommand("SELECT id,couter FROM categoryData WHERE CONVERT(DATE,Date) = CONVERT(DATE,GETDATE(),103) AND category = @category",con);
cmd2.Parameters.AddWithValue("@category", categoryList[i]);   
cmd2.ExecuteNonQuery();
希望有帮助

从categoryData中选择id、计数器,其中

编辑:SqlQuery中的字符串连接不是最好的方法,这可用于SqlInjection…

从categoryData中选择id、计数器,其中


编辑:SqlQuery中的字符串连接不是最好的方法,这可以用于SqlInjection…

您的问题在于您的查询

从categoryData中选择id。。。计数器不是要检索的字段之一。它需要说:


从categoryData中选择id、计数器

您的问题在于您的查询

从categoryData中选择id。。。计数器不是要检索的字段之一。它需要说:


从categoryData中选择id、计数器

显示所使用的sql查询,就像您没有在一篇文章中散播整个项目一样。然而,这缺少一点到很多代码。请添加包含sqlOk的整个方法,您做得不对,如果code=error,则不要这样做如果?reader3.Read正在读取未显示的代码中定义的查询结果。你需要更深入地查看代码块并显示该查询。显示使用的sql查询,就像你没有在帖子中把整个项目都写得乱七八糟一样。然而,这缺少一点到很多代码。请添加包含sqlOk的整个方法,您做得不对,如果code=error,则不要这样做如果?reader3.Read正在读取未显示的代码中定义的查询结果。您需要进一步查看代码块并显示该查询。请开始使用参数!这会让你的代码更具可读性和安全性。我会的。谢谢你的建议,真的很有帮助。真不敢相信我犯了这么愚蠢的错误。有人有使用参数的好教程吗?我发现每个人都是迟钝或太长的Sql注入演示。请开始使用参数!这会让你的代码更具可读性和安全性。我会的。谢谢你的建议,真的很有帮助。真不敢相信我犯了这么愚蠢的错误。有人有使用参数的好教程吗?我发现每个人在Sql注入演示中都很迟钝或时间过长。