【问题标题】:Column abc does not belong to table?列 abc 不属于表?
【发布时间】:2014-01-24 14:55:15
【问题描述】:

我在我的 C# 代码中迭代一个 DataTable。我尝试使用名为“row”的行的名为“columnName”的列获取内容 -

object value = row["ColumnName"];

我收到此错误 -

错误:System.Reflection.TargetInvocationException:异常已发生 由调用的目标抛出。 ---> System.ArgumentException:列 'FULL_COUNT' 不属于 table 。在 System.Data.DataRow.GetDataColumn(String columnName)

这怎么可能?我的 SQL 查询/结果集具有该名称的列,查询甚至在管理工作室中运行。

如何解决这个错误?

【问题讨论】:

  • 你能发布更多代码吗?
  • 请先说明您是如何查询数据库的。您可能还想查看表中的所有列以找出被选中的内容。
  • @JonSkeet - 好的。我需要更多时间在示例表中复制问题。很快就会做。
  • 如果ColumnName是迭代参数,需要填写为row[ColumnName]。按照您的操作方式,在每次迭代中,它都会在您的列中查找名为 ColumnName 的列。
  • 作为错误消息,问题是“没有任何名为FULL_COUNT的列”,所以我假设您的代码中有这样的行row["FULL_COUNT"],不是吗?否则,请提供完整代码。

标签: c# .net datatable


【解决方案1】:

试试这个,确保你的列名是一样的

    DataTable dt = new DataTable();
    dt.Columns.Add("abc", typeof(string));
    
    DataRow dr = dt.NewRow();
    dr["abc"]="";

【讨论】:

    【解决方案2】:

    我有一个类似的问题,这是非常基本的修复。

    我查询的是一个特定的列名,而不是Select *(即Select Title)。初学者的错误,但每个人都会发生。

    【讨论】:

      【解决方案3】:

      不要写 Gridview 列名而不是 Database 列名。

      dataGridViewEmployeeClass.Rows[n].Cells[0].Value = item["write the Database Column names"].ToString();
      

      【讨论】:

        【解决方案4】:

        我在我的 c# 代码中遇到了类似的问题,使用的数据集我已成功初始化并填充了数据库中的数据。

        所以我的返回集是:

        数据=新字节[0];

        data = (Byte[])(dataset.Tables[0].Rows[0]["systemLogo_img"]);

        当然错误在于找不到“systemLogo_img”列。

        我注意到您根本不必调用 /qualify 列名。所以更正的是:

        数据=新字节[0];

        data = (Byte[])(dataset.Tables[0].Rows[0].ItemArray[0]);

        简单地说:在位置使用“ItemArray”。

        谢谢

        【讨论】:

          【解决方案5】:

          我有同样的问题是试图为同一产品传递两个不同的密钥。

            item.Product = SqlHelper.GetSafeString(dr, "ProductName");
            item.Product = SqlHelper.GetSafeString(dr, "Product");
          

          【讨论】:

            【解决方案6】:

            我猜你的代码迭代应该是这样的

            DataTable table = new DataTable();
            foreach (DataRow row in table.Rows) {
                foreach (DataColumn col in table.Columns) {
                    object value = row[col.ColumnName];
                }
            }
            

            如果是这种情况,row["ColumnName"] 在每次迭代中都会查找名称为 ColumnName 的同一列,这显然在您的表中不存在。

            正确的方法是上面迭代中的row[ColumnName]row[col.ColumnName]

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-01-10
              • 2017-12-22
              • 2014-07-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多