【问题标题】:Error casting DataRow Item to an Int C#将 DataRow 项转换为 Int C# 时出错
【发布时间】:2015-11-13 11:44:39
【问题描述】:

我正在创建一个访问 MySQL 数据库的系统,将项目作为数据集表检索,并将每行中的项目设置为对象中的变量。我遇到的问题是,将 datarow.ItemArray[x] 转换为整数时出现错误:System.InvalidCastException。 我检查了数据库,数据库中的 Item 定义为 Int(10)。 我还通过 Visual Studio 中的调试检查了数据行,我尝试将其转换为整数的 Item 的值为 1。 我将在下面发布我的代码,但如果其他人遇到此问题并且可能知道为什么会非常感谢。

foreach (DataRow dr in ds.Tables[0].Rows)
{
    Group group = new Group();
    group.TagID = (int)dr.ItemArray[0];
    group.Name = dr[1].ToString();
    group.Parent = parent;

这里是班级组。

class Group
{
    private int tagID;
    private string name;
    private Group parent;

    List<Group> children = new List<Group>();
    List<Tags> tags = new List<Tags>();

【问题讨论】:

  • 使用调试器,dr[0]是什么类型?也可以看ds.Tables[0].Columns[0].DataType
  • Name = "UInt32" FullName = "System.UInt32"
  • 从您的图像中可以看出您正在将 int 转换为 int。尝试移除演员表。
  • @StephenBrickner:演员表是必需的,因为ItemArrayobject[]DataRow 中的所有内容都是对象,必须取消装箱。
  • @StephenBrickner 如果我不插入演员表,我会收到错误:“无法将类型'object'隐式转换为'int'。存在显式转换(您是否缺少演员表?)”跨度>

标签: c# mysql casting dataset datarow


【解决方案1】:

所以它是 UInt32 而不是 Int32,然后将其转换为:

group.TagID = (int)(uint)dr[0];

您也可以使用我更喜欢的Field 方法,因为它也支持可空值:

group.TagID = (int)dr.Field<uint>(0);

第三种选择(在这种情况下可能是最好的)是使用System.Convert.ToInt32

group.TagID = System.Convert.ToInt32(dr[0]);

【讨论】:

  • 然后我需要将我的对象组定义为无符号整数。这是一个正确的答案,但我将使用 Stephens Parsing of a toString 方法。
  • “试试这个然后 int.Parse(dr.ItemArray[0].ToString()); – Stephen Brickner 1 分钟前”
  • @JonnyWebb:我不会将我的值转换为不同的类型(这也包括本地化问题),然后通过int.Parse 转换回不同的类型。这是容易出错且效率低下的。为什么不将TagID 也设为uint 或将数据库中的值更改为int
  • @JonnyWebb:也许在这种情况下最好的方法是System.Convert.ToInt32。我已经编辑了我的答案。
【解决方案2】:

group.TagID = int.Parse(dr.ItemArray[0].ToString());

【讨论】:

    【解决方案3】:

    您使用了 INT(10),在 MySql 中这意味着它有 10 位数字。 你提到的数据类型是 UInt32。

    所以解决方案是简单地将其转换为 UInt32,而不是使用 Integer。 或者使用 Convert.ToInt32 将其转换为 inter

    见下文:

    grou.TagID = Convert.ToInt32(dr.ItemArray[0])
    

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多