【问题标题】:SQL Server parameter query fails to return resultsSQL Server 参数查询返回结果失败
【发布时间】:2016-05-25 22:30:59
【问题描述】:

我有一个应用程序,我必须将一天的选择改为一系列天。在 Management Studio 中运行的查询有效并返回正确的结果。但是在应用程序中没有返回任何内容。

代码:

SqlCommand com = new SqlCommand();
com.Connection = Program.ConnnectDatabase();
com.CommandText = Resources.FillProcessing;

string strDay = string.Empty;

if (cboProcessDay.Text.ToString().Trim() == "Monday")
    strDay = "'Monday'";

com.Parameters.Add(new SqlParameter("@Day", strDay));

DataTable dt = new DataTable();

SqlDataAdapter adt = new SqlDataAdapter();
adt.SelectCommand = com;

adt.Fill(dt);

SQL:

SELECT data.* 
FROM  Rec_data data, acc_info info 
WHERE Day IN (@Day) 
  AND info.foracid = data.foracid

知道我做错了什么吗?

【问题讨论】:

  • 试试不带引号的strDay = "Monday"
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(20 多年前),不鼓励使用它
  • 您在查询中面临Day 关键字。这可能会导致错误。尝试将 Day 包含在单个开盘报价中。
  • 如果查询什么都不返回,那是因为没有什么可以返回。您要求使用单引号括起来的日期名称,即'Monday'。我怀疑数据库中没有这样的行。您可能只想搜索 Monday 并使用 T-SQL 语法意外转义了该值,即使它已经是 C# 字符串
  • 另外,如果你要去的地方,你不能将逗号分隔的字符串作为参数传递给IN 子句。有多种方法可以做到这一点;见hereherehere

标签: c# sql-server


【解决方案1】:

我建议使用 SQL 分析器来跟踪真正从 c# 运行的语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 2018-12-22
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多