【问题标题】:Simple test of DataTable.Select() is not getting any results when it shouldDataTable.Select() 的简单测试没有得到任何结果
【发布时间】:2016-07-22 15:25:05
【问题描述】:

我正在尝试在现有 Sql Server DB 的数据集上测试不同的查询。我需要能够为我正在做的项目通过它的 id 列抓取一行。然而,看似简单的查询却没有结果。

DataSet prodspdata = new prodspDataSet(); 

DataRow[] load;
load = prodspdata.Tables["TripNumber"].Select("[ctripnumber] = '21605178'");

Console.WriteLine(load.Length);
Console.ReadLine();

load.Length 的输出为 0。我从文档中了解到 load 应该是从 Select() 查询返回的行数组。我知道这个结果是通过查看数据而存在的,所以我希望 load.length 为 1。

我在 Sql Server Management Studio 中测试了一个查询,以确保我没有遗漏任何内容:

SELECT * FROM TripNumber WHERE ctripnumber = '21605178'

这将按预期返回 1 行。

我的 Select 查询不正确吗?我是 C# 的新手,我测试错了吗?我只需要知道load 是否包含任何结果,以便我知道我的查询按预期工作。

编辑:看来我的 DataTable 没有行。

DataTable loadTable;
loadTable = prodspdata.Tables["TripNumber"];
Console.WriteLine(loadTable.Rows.Count);
Console.ReadLine();

这会返回0 行,而loadTable.Columns.Count给我133

我是否遗漏了一步,可能与 TableAdapter 相关?

【问题讨论】:

  • 如果您显示 prodspDataSet 的代码会有所帮助
  • @Juan 您是否指定 prodspDataSet.Designer.cs 代码?有8400行。当我通过项目 > 添加新数据源将其添加为 Visual Studio 中的数据源时,它是自动生成的。
  • 从调试器中探索数据集时是否有行? stackoverflow.com/questions/491555/…
  • @Juan 我发现了我的错误,但要回答你的问题:当我没有先对 TableAdapter 做任何事情时,我在调试器中探索它时没有行。
  • 很高兴听到这个消息!

标签: c# visual-studio


【解决方案1】:

不要在过滤中使用方括号。

load = prodspdata.Tables["TripNumber"].Select("ctripnumber = '21605178'");

还请记住,您可以使用 Visual Studio 调试器查看 DataSets 和 Datatables 的内容。

【讨论】:

  • 我试过带括号和不带括号的列名,结果相同。
【解决方案2】:

我实际上没有用任何东西填充我的数据集,这导致了问题。我严重忽略了 TableAdapter。我添加的代码是:

prodspDataSetTableAdapters.TripNumberTableAdapter ta = new prodspDataSetTableAdapters.TripNumberTableAdapter();

DataTable loadTable = ta.GetData();

因此,如果没有实例化 TableAdapter 和填充数据的表(基于 TableAdapter 的设置),您基本上会得到一个包含表、列且没有值的数据库的空架构。菜鸟失误。

【讨论】:

    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 2019-09-28
    • 2013-03-27
    • 2023-04-01
    • 1970-01-01
    • 2013-11-25
    • 2019-12-21
    • 1970-01-01
    相关资源
    最近更新 更多