【问题标题】:c# query is not returning anythingc#查询没有返回任何东西
【发布时间】:2011-05-04 18:38:47
【问题描述】:

这是我的查询:

select reporttime, datapath, finalconc, instrument from batchinfo 
    join qvalues on batchinfo.rowid=qvalues.rowid where qvalues.rowid 
    in (select rowid from batchinfo where instrument LIKE '%TF1%' and reporttime
    like '10/%/2010%') and compound='ETG' and  name='QC1'

我是这样运行的:

    // Create a database connection object using the connection string    
    OleDbConnection myConnection = new OleDbConnection(myConnectionString);

    // Create a database command on the connection using query    
    OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);

它不返回任何结果。

当我在 sql server GUI 中尝试同样的查询时,它会返回很多行

c#的查询语法有问题吗?

请注意,如果我像select * from table 这样简化查询,则没有问题

【问题讨论】:

  • 您能否提供实际将值分配给mySelectQuery 的代码?
  • 运行查询分析器以查看正在执行的实际查询(如果有)
  • 您的reporttime 列是什么数据类型?顾名思义,它是暂时的(DATEDATETIME 等),但通配符的使用表明它是文本(VARCHAR 等)。
  • @oneday 我的朋友是 varchar
  • @postman 把答案变成你绝对正确的答案

标签: c# .net sql sql-server-2008 select


【解决方案1】:

编辑 - 没关系,只需阅读您的日期在 varchar 字段中的注释即可。将其留在这里,因为它可能仍然是有用的信息。

试试这个:

reporttime like 'Oct%2010%'

我在这里有一个测试表,当我使用

查询它时
where LastModified like '11/%/2010%'

虽然表中所有行的日期都是 2010 年 11 月,但没有返回任何行。当我使用 like 'Nov%2010%' 运行相同的查询时,它会返回所有行。

详情可见here:

LIKE 子句也可用于搜索特定日期。您需要记住 LIKE 子句用于搜索字符串。因此,您要搜索的值需要以字母日期的格式表示。正确使用的格式是:MON DD YYYY HH:MM:SS.MMMAM,其中 MON 是月份缩写,DD 是日,YYYY 是年,HH 是小时,MM 是分钟,SS 是秒,MMM 是毫秒,AM 表示 AM 或 PM。

【讨论】:

  • 感谢您的回复,但就像我说的,我尝试了查询,使用 sql server gui 没问题
【解决方案2】:

我个人会运行查询分析器以查看正在运行的查询(如果有),然后从那里开始。

【讨论】:

  • 我正在运行分析器,看起来没问题。运行 frmo 时,sql GUI 很好,但是当我尝试从 c# 执行时,它不会返回任何内容
【解决方案3】:

您可以尝试使用SqlCommand 代替OleDbCommand 吗?

根据 MSDN:Represents a Transact-SQL statement or stored procedure to execute against a SQL Server database.

因此,如果您真的在使用 SQL Server 2008,您可能应该使用它。你不是有什么理由吗?

【讨论】:

  • 嗯,我认为在您的情况下,只需将所有出现的OleDbCommandOleDbConnenction 替换为SqlCommandSqlConnection。它们是非常相似的类,只是用途不同。
  • 您能否将用于将 SQL 分配给 mySelectQuery 的代码粘贴到您原来的帖子中?
【解决方案4】:

您确定在您的代码中连接到同一个数据库吗?

顺便说一句,您需要内部选择吗?你不能把这个查询写成如下。

选择报告时间, 数据路径, 最终浓度, 仪器 来自批处理信息 在 batchinfo.rowid = qvalues.rowid 上加入 qvalues 其中化合物 = 'ETG' 和名称 = 'QC1' 和 batchinfo.instrument 之类的 '%TF1%' 和 batchinfo.reporttime 像 '10/%/2010%'

【讨论】:

  • 哇,这并不能解决问题,但绝对让我深入了解如何修复 sql
  • 谢谢你,我想,但我看到这样的问题就像连接到测试而不是开发一样简单
【解决方案5】:

您如何设置 mySelectQuery 字符串? 这可能是转义字符的问题吗?

如果你还没有这样做,

string mySelectQuery = @"query text here";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多