选择Auto_Increment值C#的MySql异常

时间:2016-03-26 01:52:23

标签: c# mysql mysql-connector

我想获取用户名和用户ID,但是当我执行命令时 我得到了例外:

  

指数超出范围。必须是非负数且小于集合的大小。\ r \ nParameter name:startIndex“

数据库具有Items: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){
  

Exception在“ExecuteReader”处抛出。

队列

“选择*来自UserID = '42'的用户”在服务器上执行没有任何问题。

我的问题是:

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

修改

我也只尝试了查询

  

SELECT * FROM User User

但我得到同样的例外。

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

EDIT2:

如果我只选择查询正在运行的用户名:

从用户中选择用户名

但是当我尝试获取UserID

从用户中选择用户ID

我得到了例外:

  

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

3 个答案:

答案 0 :(得分:0)

尝试42不带引号

"SELECT * FROM User Where UserID = 42"

答案 1 :(得分:0)

也许这段代码编辑可以帮到你。

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
}

我希望你明白这一点。

答案 2 :(得分:0)

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

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

SELECT * FROM `User`

你注意到一些变化吗?