System.InvalidCastException: 无法将类型 'System.Double' 的对象转换为代码中的类型 'System.Int32'
System.InvalidCastException: Unable to cast object of type 'System.Double' to type 'System.Int32' in code
我制作了一种方法,可以从数据库中的特定列中获取所有行值并将它们作为整数转换为列表。当我 运行 这段代码在我的个人电脑上运行时非常有效,但在我公司的电脑上这段代码会抛出异常。
这是代码:
static void Main(string[] args)
{
int norm = 43;
List<int> List = new List<int>();
string connString = ///
DataTable dt = new DataTable();
using (OleDbConnection conn = new(connString))
{
OleDbCommand cmd = new("SELECT * FROM USERS", conn);
conn.Open();
OleDbDataAdapter adapter = new(cmd);
adapter.Fill(dt);
}
try
{
if (norm == 33)
{
for (int i = 0; i < 9; i++)
{
List.Add(Convert.ToInt32(dt.Rows[i].Field<int>(1)));
}
Console.WriteLine(LeftSegmentIndex(List, 27));
}
else if (norm == 43)
{
for (int i = 9; i < dt.Rows.Count; i++)
{
List.Add(Convert.ToInt32(dt.Rows[i].Field<int>(1)));
}
Console.WriteLine(LeftSegmentIndex(List, 27));
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
代码抛出以下异常:
System.InvalidCastException: Unable to cast object of type 'System.Double' to type 'System.Int32'.
at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)
at System.Data.DataRowExtensions.Field[T](DataRow row, Int32 columnIndex)
这个异常发生在第 46 行。
数据库中有这样的数字:
Soc Art T_c
12 13 11
15 17 13
18 20 16
22 24 19
25 28 23
28 32 26
32 36 30
36 39 35
44 44 44
13 14 12
16 17 14
19 21 17
22 25 21
26 29 24
30 33 28
33 37 32
37 40 36
44 44 44
谁能解释一下为什么我公司的电脑会出现这个错误,而我的个人电脑却不会?
谢谢。
该错误告诉您基础值是 double
,而您正试图将其读取为 int
。如果不同数据库中的类型不同 - 不要假设 int
,让 Convert.ToInt32
完成它的工作:
List.Add(Convert.ToInt32(dt.Rows[i][1]));
我制作了一种方法,可以从数据库中的特定列中获取所有行值并将它们作为整数转换为列表。当我 运行 这段代码在我的个人电脑上运行时非常有效,但在我公司的电脑上这段代码会抛出异常。
这是代码:
static void Main(string[] args)
{
int norm = 43;
List<int> List = new List<int>();
string connString = ///
DataTable dt = new DataTable();
using (OleDbConnection conn = new(connString))
{
OleDbCommand cmd = new("SELECT * FROM USERS", conn);
conn.Open();
OleDbDataAdapter adapter = new(cmd);
adapter.Fill(dt);
}
try
{
if (norm == 33)
{
for (int i = 0; i < 9; i++)
{
List.Add(Convert.ToInt32(dt.Rows[i].Field<int>(1)));
}
Console.WriteLine(LeftSegmentIndex(List, 27));
}
else if (norm == 43)
{
for (int i = 9; i < dt.Rows.Count; i++)
{
List.Add(Convert.ToInt32(dt.Rows[i].Field<int>(1)));
}
Console.WriteLine(LeftSegmentIndex(List, 27));
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
代码抛出以下异常:
System.InvalidCastException: Unable to cast object of type 'System.Double' to type 'System.Int32'.
at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)
at System.Data.DataRowExtensions.Field[T](DataRow row, Int32 columnIndex)
这个异常发生在第 46 行。
数据库中有这样的数字:
Soc Art T_c
12 13 11
15 17 13
18 20 16
22 24 19
25 28 23
28 32 26
32 36 30
36 39 35
44 44 44
13 14 12
16 17 14
19 21 17
22 25 21
26 29 24
30 33 28
33 37 32
37 40 36
44 44 44
谁能解释一下为什么我公司的电脑会出现这个错误,而我的个人电脑却不会?
谢谢。
该错误告诉您基础值是 double
,而您正试图将其读取为 int
。如果不同数据库中的类型不同 - 不要假设 int
,让 Convert.ToInt32
完成它的工作:
List.Add(Convert.ToInt32(dt.Rows[i][1]));