【问题标题】:Passing variable to datatable's select method but produces empty results将变量传递给数据表的 select 方法但产生空结果
【发布时间】:2018-08-07 23:16:39
【问题描述】:

我正在使用以下代码将文件名变量传递给 DataTable Select 语句。但是返回的结果为 null。

var filteredDataRows2 = dt.Select("Status = 'Valid' AND Filename ='"+filename+"'");

我做错了什么?请指教。

更新: 数据表dt 包含值。文件名中有多个空格eg:my cool file 2018..,这可能是问题吗?

【问题讨论】:

  • 您是否尝试过dt.Select("Status = 'Valid'"); 来确定这是否是由文件名引起的?当您直接在数据库中(而不是通过 C#)执行语句时会发生什么?
  • @ThomasFlinkow 当我从语句中删除文件名时会产生结果。我不使用任何数据库。
  • 好的,我明白了...dt.Select($"Status = 'Valid' AND FileName = \"{filename}\"") 怎么样,这可能有用吗?
  • 试过了..程序没​​有产生任何结果。
  • @ThomasFlinkow 实际上这是循环中的另一个问题。我使用的是没有数据的旧数据表...已修复...感谢您的帮助

标签: c# .net select datatable


【解决方案1】:

请在DataTable本身中显示相关数据;我创建了以下最小示例,但无法重现您遇到的行为。


DataTable table = new DataTable();
table.Columns.Add("Status", typeof(string));
table.Columns.Add("Filename", typeof(string));

table.Rows.Add("Valid", "C:\\Test File With Spaces.txt");
table.Rows.Add("Valid", "C:\\Test File.txt");
table.Rows.Add("Invalid", "C:\\Test File With Spaces.txt");
table.Rows.Add("Valid", "C:\\Test.txt");

string filename = "C:\\Test File With Spaces.txt";

var allRows = table.Select(); // Expected Rows: 4 Actual Rows: 4
var filteredRows = table.Select("Status = 'Valid'"); // Expected Rows: 3 Actual Rows: 3
var filteredRows2 = table.Select($"Status = 'Valid' AND Filename = '{filename}'"); // Expected Rows: 1 Actual Rows: 1

【讨论】:

    【解决方案2】:

    首先,检查数据表中的数据是否有数据!如果你想用你的条件得到它,然后用这个语句测试它。

    filteredDataRows2 = dt.Select(String.Format("Status = Valid AND Filename = '{0}'", filename));
    

    【讨论】:

    • 谢谢...数据表包含值..我试过你的代码,但同样的问题..文件名包含多个空格...可能是问题吗?
    • @techno 不是,因为您应该尝试使用简单的查询。例如,尝试不使用 'Status = 'Valid' AND',反之亦然,不使用 'Filename = '{0}'", filename'。也许您的条件(查询)有问题。
    • @techno 请把你的单引号去掉就有效了。
    • 试过了...没有任何输出。
    • 实际上这是循环中的另一个问题。我使用的是没有数据的旧数据表...已修复...谢谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2019-11-06
    • 1970-01-01
    相关资源
    最近更新 更多