I have a problem with a DataRow that I'm really struggling with.
The datarow is read in from an Excel spreadsheet using an OleDbConnection.
If I try to select data from the DataRow using the column name, it returns DBNull even though there is data there.
But it's not quite that simple.
datarow.Table.Columns[5].ColumnName
returns "my column".datarow["my column"]
returns DBNull.datarow[5]
returns 500.datarow[datarow.Table.Columns[5].ColumnName]
returns DBNull. (just to make sure its not a typo!)
I could just select things from the datarow using the column number, but I dislike doing that since if the column ordering changes, the software will break.
ColumnIndex - The index of the column whose value is to be retrieved from the DataRow.
You can get the column names from DataRow by using (datarow). Table. Columns and this will return “DataColumnCollection”.
Just use an index to access each element. The following code would acccess the first element in the list. the name of the property you are trying to access. each datarow will maintain the schema of the datatable that it came from so you still have columns in the datarow.
A DataRow represent a row of data in data table. You add data to the data table using DataRow object. A DataRowCollection object represents a collection of data rows of a data table.
Which version of .NET are you using? Since .NET 3.5, there's an assembly System.Data.DataSetExtensions, which contains various useful extensions for dataTables, dataRows and the like.
You can try using
row.Field<type>("fieldName");
if that doesn't work, you can do this:
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)); }
This must be a new feature or something, otherwise I'm not sure why it hasn't been mentioned.
You can access the value in a column in a DataRow
object using row["ColumnName"]
:
DataRow row = table.Rows[0]; string rowValue = row["ColumnName"].ToString();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With