我确实遇到了DataRow的问题。

使用OleDbConnection从Excel电子表格中读取数据行。

如果我尝试使用列名从DataRow中选择数据,即使那里有数据,它也会返回DBNull。

但这不是那么简单。
datarow.Table.Columns[5].ColumnName返回“我的专栏”。datarow["my column"]返回DBNull。datarow[5]返回500。datarow[datarow.Table.Columns[5].ColumnName]返回DBNull。 (只是为了确保它不是错字!)

我可以只使用列号从数据行中选择内容,但是我不喜欢这样做,因为如果列顺序发生变化,软件就会崩溃。

最佳答案

您正在使用哪个版本的.NET?从.NET 3.5开始,有一个程序集System.Data.DataSetExtensions,其中包含dataTables,dataRows等的各种有用扩展。

您可以尝试使用

row.Field<type>("fieldName");

如果这不起作用,则可以执行以下操作:
DataTable table = new DataTable();
var myColumn = table.Columns.Cast<DataColumn>().SingleOrDefault(col => col.ColumnName == "myColumnName");
if (myColumn != null)
{
    // just some roww
    var tableRow = table.AsEnumerable().First();
    var myData = tableRow.Field<string>(myColumn);
    // or if above does not work
    myData = tableRow.Field<string>(table.Columns.IndexOf(myColumn));
}

关于c# - DataRow:通过给定的列名称选择单元格值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7119993/

10-12 01:17