通过选择 UserID(PK) 在 ExecuteReader 上出现 MySqlException
MySqlException on ExecuteReader by Selecting UserID(PK)
我尝试在查询正常的 phpAdmin 上从数据库中删除一行
很好,但是当我用
执行它时
代码:
MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM User", connection);
MySqlDataReader reader = getUserID.ExecuteReader();
我明白了
错误:
Destination array is not long enough to copy all the items in the
collection. Check array index and length.
我之前插入删除用户没有任何问题。
数据库有一个 UserID
,其属性为 Unique
、Int
(长度 9)和 Auto-Increment
,以及一个来自 Char 类型的 UserName
。
我的问题是:
为什么我收不到userID
,我怎样才能收到?
编辑
我无法接收任何整数或日期数据,只能接收 varchar。
这是数据库创建查询:
Creation Query
异常意味着您得到了意外的结果。 ExecuteNonQuery 方法尝试执行一个 returns 没有行的查询,并且 returns 一个显示数据库中编辑的行数的整数。所以它试图将结果数组放入整数字段,这是不可能的。
所以回答你的问题,错误的原因是查询。对于 select 查询,您应该使用 ExecuteReader()
方法。
首先因为你想检索单个值(UserID
)你可以在这里使用ExecuteScalar
:
MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM `User`", connection);
connection.Open();
int userId = (int)getUserID.ExecuteScalar();
connection.Close();
其次 User
是一个reserved keyword,所以你需要在table名称周围使用反引号使其明确:
MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM `User`", connection);
问题是数据库 MySqlConnection 无法获取未签名的 Int 或 Date 值,这也意味着异常:
"Destination array is not long enough to copy all the items in the collection. Check array index and length."
我尝试在查询正常的 phpAdmin 上从数据库中删除一行 很好,但是当我用
执行它时代码:
MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM User", connection);
MySqlDataReader reader = getUserID.ExecuteReader();
我明白了
错误:
Destination array is not long enough to copy all the items in the collection. Check array index and length.
我之前插入删除用户没有任何问题。
数据库有一个 UserID
,其属性为 Unique
、Int
(长度 9)和 Auto-Increment
,以及一个来自 Char 类型的 UserName
。
我的问题是:
为什么我收不到userID
,我怎样才能收到?
编辑
我无法接收任何整数或日期数据,只能接收 varchar。
这是数据库创建查询: Creation Query
异常意味着您得到了意外的结果。 ExecuteNonQuery 方法尝试执行一个 returns 没有行的查询,并且 returns 一个显示数据库中编辑的行数的整数。所以它试图将结果数组放入整数字段,这是不可能的。
所以回答你的问题,错误的原因是查询。对于 select 查询,您应该使用 ExecuteReader()
方法。
首先因为你想检索单个值(UserID
)你可以在这里使用ExecuteScalar
:
MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM `User`", connection);
connection.Open();
int userId = (int)getUserID.ExecuteScalar();
connection.Close();
其次 User
是一个reserved keyword,所以你需要在table名称周围使用反引号使其明确:
MySqlCommand getUserID = new MySqlCommand("SELECT UserID FROM `User`", connection);
问题是数据库 MySqlConnection 无法获取未签名的 Int 或 Date 值,这也意味着异常:
"Destination array is not long enough to copy all the items in the collection. Check array index and length."