强制转换无效,但曾经是
本文关键字:曾经 无效 转换 | 更新日期: 2023-09-27 18:32:42
我不确定发生了什么。这段代码昨天工作正常,但今天当我尝试运行它时,我在标记的位置收到"指定的强制转换无效"错误。查询返回介于 1 和 25 之间的整数。在 Access 数据库中,字段的数据类型为"数字",字段大小 ="长整型"。
关于如何纠正此问题的任何线索?
static void PopulateClientList()
{
Console.WriteLine("Populating Client List...");
Console.WriteLine("'r");
OleDbConnection conn = new OleDbConnection(strAccessConnABS);
string query = "SELECT DISTINCT Client FROM ORDERS WHERE Status = 'On Hold';";
OleDbCommand command = new OleDbCommand(query, conn);
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(query, conn);
//OleDbDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable();
try
{
//if (reader.HasRows)
//{
// while (reader.Read())
// {
//clientlist.Add(reader.GetInt32(0)); //cast not valid error happens here
//}
// }
adapter.Fill(dt);
if (dt.Rows.Count >= 1)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (dt.Rows[i][0].ToString() != "")
clientlist.Add((int)dt.Rows[i][0]);
}
}
}
catch (OleDbException ex)
{
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}
您的问题可能是已将超过最大值Int32
的值添加到表中。 在此之前,您的代码不会引发异常。
该字段的数据类型为"数字",字段大小 ="长整数"。
那你为什么要在这里把它当作Int32
来读呢?
clientlist.Add(reader.GetInt32(0)); //cast not valid error happens here
将其更改为:
clientlist.Add(reader.GetInt64(0));
根据clientlist
是什么,您还必须更改其类型以接受Int64
。
在 Access 数据库中,该字段的数据类型为"数字",具有 字段大小 ="长整数"。
您没有使用长:
clientlist.Add(reader.GetInt32(0)); //cast not valid error happens here -> Use GetInt64
我想有人将数据库字段从 int> 长
我刚刚注意到这个问题。不知道它是怎么发生的。当我运行查询时,在数据库内部,第一行是空白的。当读者读取该内容并尝试将其添加到列表中时,它不会这样做,因为它是一个空值。