列abc不属于表?

时间:2014-01-07 02:30:02

标签: c# .net datatable

我在C#代码中迭代一个DataTable。我尝试使用 -

使用名为“row”的行名为“columnName”的列来获取内容
object value = row["ColumnName"];

我收到此错误 -

  

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

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

如何解决此错误?

6 个答案:

答案 0 :(得分:15)

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

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]上面的迭代

答案 1 :(得分:1)

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

所以我的回归是:

  

data = new Byte [0];

     

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

当然,错误是找到'systemLogo_img'列。

我注意到你根本不需要调用/限定列名。所以纠正是:

  

data = new Byte [0];

     

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

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

由于

答案 2 :(得分:0)

不要编写Gradeview列名而不是数据库列名。

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

答案 3 :(得分:0)

我有一个类似的问题,必须解决。

我正在使用特定的列名而不是Select *(即Select Title)进行查询。初学者的错误,但所有人都会发生。

答案 4 :(得分:0)

尝试一下,确保您的列名相同

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

答案 5 :(得分:-2)

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

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