目前我正在这样做......
object s = new object();
s = mydatarow["mycolumn"];
我想做的是...
DataRow r = null;
r = mydatarow["mycolumn"];
我收到一个错误,说不能从对象转换为 DataRow。
有更好的方法吗?
看起来你做错了什么。
DataRow r = null;
r = mydatarow["mycolumn"];
mydatarow 是 DataRow 本身。当您引用特定列时,您会得到表格的“单元格”。(它具有类型对象,因为 DataSet 基本上是松散类型的)但是您尝试将单元格分配给 DataRow。
知道了?
一共有三样东西……一个DataTable(多行),一个TABLE的数据ROW(多个字段/列),以及各个列单元格本身。
DataTable oTbl = ResultSetFromYourQuery();
DataRow oDR = oTbl.Rows[0]; // Rows[0] is first row in a result table (zero-based)
String ColumnValue = oDR["YourColumnName"];
你可以试试这个:
DataRow r = null;
r = (DataRow) mydatarow["mycolumn"]; //*
这不太可能,但理论上可能会奏效。通常,当我在处理这些东西时遇到问题时,我会坚持一个断点(我在其中添加//*
), watchmydatarow["mycolumn"]
并让 Visual Studio 告诉我它实际上是什么类型(以及其他要确定的东西)。
你现在在做什么...
object s = new object();
s = mydatarow["mycolumn"];
这不是一个好主意,因为第一行创建了一个新对象,然后第二行丢弃了该对象并将其替换为 DataRow 中“mycolumn”列中的值。这并没有太大的伤害,只是它无缘无故地为垃圾收集器创造了额外的工作。取而代之的是,您应该这样做:
object s = mydatarow["mycolumn"];
但是,如果您碰巧知道“mycolumn”包含一个字符串值,您可以这样做:
string s = (string)mydatarow["mycolumn"];
同样,如果“mycolumn”是一个整数列...
int x = (int)mydatarow["mycolumn"];
在任何情况下,您都不应该执行以下操作,因为它根本没有任何意义,而且框架足以告诉您 DataRow 中的“mycolumn”值实际上不是另一个 DataRow。
DataRow r = null;
r = mydatarow["mycolumn"];