我在C#代码中迭代一个DataTable。我尝试使用 -
使用名为“row”的行名为“columnName”的列来获取内容object value = row["ColumnName"];
我收到此错误 -
错误:System.Reflection.TargetInvocationException:异常已经发生 由调用目标抛出。 ---> System.ArgumentException:列'FULL_COUNT'不属于表。在System.Data.DataRow.GetDataColumn(String columnName)
这怎么可能?我的SQL查询/结果集具有该名称的列,查询甚至可以在管理工作室中运行。
如何解决此错误?
答案 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");