【问题标题】:SQL Query Does not work in c#SQL查询在c#中不起作用
【发布时间】:2015-11-25 18:21:40
【问题描述】:

当我在 SQL Management Studio 中运行以下查询时,它运行良好。

当我在 c# 中运行它时,结果没有行(只有标题) - 为什么? 我已经单步执行了代码。仅返回标头。无记录。 注意:Query2 定义为 SQL 查询。

SQL Management Studio 查询 - 工作

SELECT 
    * 
FROM 
    [TraceData].[dbo].[MachineLog2] 
WHERE 
    [MachineFailReason] not like 'Passed' 
    AND Timestamp  >= CAST(GETDATE()-1 AS DATETIME) + CAST('04:00:00' AS DATETIME)  
ORDER BY Timestamp DESC

C# 代码 - 不起作用

SqlConnection conn2 = new SqlConnection(connectionString);  
string Query2 = @ConfigurationManager.AppSettings["Query2"];  
conn2.Open();

SqlCommand cmd2 = new SqlCommand(Query, conn2); 
SqlDataReader dr2 = cmd2.ExecuteReader();

【问题讨论】:

  • 不同的数据库?
  • 当您说不起作用时-您的意思是它不返回任何记录吗?您是否浏览过代码以确保正确设置和加载 AppSettings?
  • 你怎么知道它不起作用?你打电话给 dr2.Read() 了吗?
  • 顺便说一句 not like 'Passed' 应该是 <> 'Passed'
  • @Prescott 是的,我已经浏览了代码。没有工作意味着 0 记录返回给定相同的查询,在 SQL 管理工作室有结果。

标签: c# sql sql-server-2008


【解决方案1】:

可能是错字,但您声明 Query2 并使用 Query

string **Query2** = @ConfigurationManager.AppSettings["Query2"];  
conn2.Open();

SqlCommand cmd2 = new SqlCommand(**Query**, conn2); 

【讨论】:

  • 你是对的 - 这就是问题所在 - 我认为这是在 c# 中嵌入 sql 命令的问题
【解决方案2】:

通过将查询放在存储过程中并使用 C# 运行存储过程,可以更好地调试或完全解决此类问题。

所以你的存储过程创建查询看起来像这样

USE TraceData;
GO
CREATE PROCEDURE MyWrappedQuery

AS 
BEGIN

SELECT 
    * 
FROM 
    [TraceData].[dbo].[MachineLog2] 
WHERE 
    [MachineFailReason] not like 'Passed' 
    AND Timestamp  >= CAST(GETDATE()-1 AS DATETIME) + CAST('04:00:00' AS DATETIME)  
ORDER BY Timestamp DESC

END

在 C# 中,您可以运行查询“exec MyWrappedQuery”或通过 ado.net 运行 SP

尝试并回复此问题,如果查询在 SQL Server 中工作但不能通过 C#,它应该可以工作。

【讨论】:

  • 我无权访问服务器来创建存储过程。
猜你喜欢
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多