繁体   English   中英

通过选择Auto_Increment值C#实现MySql异常

[英]MySql Exception by Selecting Auto_Increment Values C#

我想获取用户名和用户名,但是当我执行命令时,出现异常:

索引超出范围。 必须为非负数,并且小于集合的大小。\\ r \\ n参数名称:startIndex“

该数据库具有以下各项:UserID(AutoIncrement Int(9)(PK))和UserName(Varchar(20))

码:

using (MySqlConnection connection = new MySqlConnection(DBConnection.ConnectionString))
{
connection.Open();
MySqlCommand getUser = new MySqlCommand("SELECT * FROM User Where UserID = '42'", connection);
MySqlDataReader reader = getUser.ExecuteReader();
if (reader.HasRows){

在“ ExecuteReader”处引发异常。

队列

正在执行“从用户ID = '42'的用户中选择*”,而服务器上没有任何问题。

我的问题是:

为什么我的索引超出范围异常?

编辑:

我也只尝试查询

选择*从用户其中User

但是我也有同样的例外。

我可以插入表中,也可以获取最后插入ID,但是当我尝试使用Select * From XY对每个数据库进行操作时,会得到相同的异常。 所有表都带有innobDB,并且所有表至少具有1个主键或外键。

编辑2:

如果仅选择用户名,则查询有效:

从用户中选择用户名

但是当我尝试获取用户ID时

从用户中选择用户ID

我得到异常:

{“目标数组不足以复制集合中的所有项目。检查数组索引和长度。”} System.Exception {System.ArgumentException}

尝试42不加引号

"SELECT * FROM User Where UserID = 42"

也许您对代码的这种编辑可以为您提供帮助。

using (MySqlConnection connection = new MySqlConnection(DBConnection.ConnectionString))
{
    connection.Open();
    MySqlCommand getUser = new MySqlCommand("SELECT * FROM `User` WHERE `User`.`UserID` = 42", connection);
    MySqlDataReader reader = getUser.ExecuteReader();

    //rest of your code
}

希望您能明白。

作为明智的错误发现程序,我建议检查错误是否位于sql级别。

尝试简单地执行普通查询来摆脱where子句

SELECT * FROM `User`

你注意到一些变化吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM