【问题标题】:SQL Server Char/VarChar DateTime Error [closed]SQL Server Char/VarChar DateTime 错误 [关闭]
【发布时间】:2012-01-05 08:35:54
【问题描述】:

谁能告诉我为什么这段代码会出错?

C# 代码

DateTime now = DateTime.Now;
DateTime after1month = DateTime.Now.AddMonths(1);

它产生的查询

SELECT * FROM TABLE WHERE THEDATE BETWEEN 'now' AND 'after1month' 

感谢任何帮助。 谢谢

【问题讨论】:

  • 向我们展示创建和运行此查询的代码
  • 您遇到了什么错误?以及如何创建查询?
  • 该 C# 代码不会生成 SQL,因此还有其他代码正在创建 SQL (LINQ to SQL)。我们需要看到这一点。
  • 这里 'now' 和 'after1month' 被视为与日期列值不匹配的字符串
  • 请添加您正在使用的 ADO 代码 - 否则我们只是猜测。

标签: c# sql sql-server


【解决方案1】:

这应该看起来更像这样:

DateTime now = DateTime.Now;
DateTime after1month = DateTime.Now.AddMonths(1);

SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE WHERE THEDATE BETWEEN @now AND @after1month", connection);
cmd.Parameters.Add(new SqlParameter("@now", System.Data.SqlDbType.DateTime).Value = now);
cmd.Parameters.Add(new SqlParameter("@after1month", System.Data.SqlDbType.DateTime).Value = after1month);

有时您可以使用查询直接在 SQL Server 端执行此操作:

SELECT * FROM TABLE WHERE THEDATE BETWEEN getdate() AND dateadd(mm, 1, getdate())

没有来自 .NET 的参数。

添加(评论后):

dateadd 是一个 SQL Server 函数,允许添加特定的日期间隔并返回它。

在这种情况下,dateadd(mm, 1, getdate()) 将一个 (1) 月 (mm) 添加到当前日期时间 (getdate())。有关日期部分标识符和函数本身的更多信息,请访问 MSDN dateadd

【讨论】:

【解决方案2】:

如果你不想使用 ADO,那么直接使用 SQL 查询

SELECT * FROM TABLE WHERE THEDATE BETWEEN GETDATE() AND DATEADD(mm, 1, GETDATE())

这里的 DATEADD 函数通过使用 'mm' 参数将一个月添加到当前月份。

【讨论】:

    【解决方案3】:

    我认为 'now' 和 'after1month' 是您在查询中使用的变量。这些变量的数据类型是什么?您需要将其转换为日期时间类型。使用 SQL server 的 Convert 或 Cast 函数来完成。

    【讨论】:

    • 不,在这种情况下它们不是变量,因为存在单引号。它被视为字符串常量
    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多