这是我的查询:
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
之类的查询,则没有问题
答案 0 :(得分:4)
您可以尝试使用SqlCommand代替OleDbCommand吗?
根据MSDN,它:Represents a Transact-SQL statement or stored procedure to execute against a SQL Server database.
因此,如果您确实在使用SQL Server 2008,那么您应该使用它。你不是的任何理由?
答案 1 :(得分:2)
你是如何设置mySelectQuery字符串的? 这可能是转义字符的问题吗?
如果你还没有这样做,
string mySelectQuery = @"query text here";
答案 2 :(得分:2)
就个人而言,我会运行查询分析器以查看正在运行的查询(如果有),然后从那里开始。
答案 3 :(得分:1)
您确定要连接到代码中的同一个数据库吗?
在旁注上你需要内部选择吗?你不能按如下方式写这个查询。
select reporttime, datapath, finalconc, instrument from batchinfo join qvalues on batchinfo.rowid = qvalues.rowid where compound = 'ETG' and name = 'QC1' and batchinfo.instrument like '%TF1%' and batchinfo.reporttime like '10/%/2010%'
答案 4 :(得分: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。