DataRow:通过给定的列名称选择单元格值
我的 DataRow 有一个问题,我真的很苦恼。
使用 OleDbConnection 从 Excel 电子表格中读取数据行。
如果我尝试使用列名称从 DataRow 选择数据,即使那里有数据,它也会返回 DBNull。
但事情并不那么简单。
datarow.Table.Columns[5].ColumnName
返回“我的列”。datarow["my column"]
返回 DBNull。datarow[5]
返回 500。datarow[datarow.Table.Columns[5].ColumnName]
返回 DBNull。 (只是为了确保它不是拼写错误!)
我可以使用列号从数据行中选择内容,但我不喜欢这样做,因为如果列顺序发生变化,软件就会崩溃。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
您使用的是哪个版本的 .NET?从 .NET 3.5 开始,出现了一个程序集 System.Data.DataSetExtensions,其中包含 dataTables、dataRows 等的各种有用的扩展。
您可以尝试使用,您可以这样做:
如果这不起作用,
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
if that doesn't work, you can do this:
这肯定是一个新功能什么的,否则我不知道为什么没有被提及。
您可以使用
row["ColumnName"]
访问DataRow
对象中列中的值: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 usingrow["ColumnName"]
:我发现通过执行以下操作可以更轻松地访问它:
I find it easier to access it by doing the following:
提示
编辑:添加更多
Hint
EDIT: Added more
除了 Jimmy 所说的之外,您还可以使用
Convert.ChangeType
以及必要的 null 检查来使选择通用:On top of what Jimmy said, you can also make the select generic by using
Convert.ChangeType
along with the necessary null checks:您可以在 VB.net 中获取列值
,在 C# 中您可以使用 Jimmy's Answer,将其转换为时要小心
ToString()
。如果数据为空,它可能会抛出空异常而是使用
Convert.ToString(your_expression)
来避免 null 异常参考You can get the column value in VB.net
And in C# you can use Jimmy's Answer, just be careful while converting it to
ToString()
. It can throw null exception if the data is nullinstead Use
Convert.ToString(your_expression)
to avoid null exception reference请注意数据类型。如果不匹配就会抛出错误。
Be careful on datatype. If not match it will throw an error.
简单的解决方案:
假设 sqlDt 包含 DataTable,那么这将为您提供
行中名为“aaa”的列是:
编辑的代码格式
Simple solution:
Assume sqlDt contains the DataTable, then this will give you the content of the
column named "aaa" in row is:
Edited code formatting