【问题标题】:Row couldn't be returned from a DataTable C#无法从 DataTable C# 返回行
【发布时间】:2019-04-28 21:24:24
【问题描述】:

我有一个包含数据的 DataTable,我可以在 VisualStudio 中调试它并验证值。而且我可以看到列 'Path' 值在 DataTable 对象中可用,但我无法使用 Select 检索行。请帮我找回行。以下是我正在尝试的代码:

注意:path 值 [C:\Program Files<space>(x86)]

中有一个空格
string path = @"C:\Program Files (x86)\Common Files\Microsoft Shared\VsHub\1.0.0.0\Microsoft.VsHub.Server.HttpHost.exe"
string condition = string.Format("Path = '{0}'", path);
DataRow row = myDataTable.Select(condition).FirstOrDefault(); //returns null

【问题讨论】:

  • 是区分大小写的问题吗?如果您可以确认该值与您拼写的一样存在(还要检查末尾的任何空格),那么此代码没有理由失败
  • 我试图重现您的代码,但完全没有问题(正如预期的那样)。正如我所说的那样,有些东西与存储在数据库中的路径不同。可能有些空间不是真正的空间。尝试在编辑器中复制/粘贴数据库行中的值,并查看这些空格的十六进制值。都应该是 0x20。
  • 是的@Steve,空格造成了实际问题,并且已通过在比较时删除空格来解决(检查条件)。但我认为这不是在比较时删除两边空格的正确方法,有没有更好的方法?
  • 你是如何定义你的路径列的?它应该是一个 nvarchar 列。如果您使用 char(x),则 db 会添加空格以填充列大小。
  • @Steve 这不是从数据库读取,而是从本地机器读取文件路径,显然path 变量是string

标签: c# select datatable datarow


【解决方案1】:

试试这个:

DataRow row = myDataTable.AsEnumerable().FirstOrDefault( dr => dr.Field<string>("Path" ) == path);

【讨论】:

  • 它没有用。当我修改了问题时,路径值中有一个空格。请验证并修改您的解决方案。谢谢
  • 您确定数据表中至少有一行具有该路径值吗?
  • 是的,行存在,我可以使用 Visual Studio 中的调试器进行验证。这是个奇怪的问题!
  • 你能分享数据表中的路径值吗?
  • 这是准确的值:C:\Program Files (x86)\Common Files\Microsoft Shared\VsHub\1.0.0.0\Microsoft.VsHub.Server.HttpHost.exe
猜你喜欢
  • 2020-03-16
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2021-05-16
  • 2014-05-15
  • 1970-01-01
相关资源
最近更新 更多