【问题标题】:Insert DateTime from ASP.NET into Stored Proc将 ASP.NET 中的 DateTime 插入存储过程
【发布时间】:2011-07-23 23:21:39
【问题描述】:

我正在尝试将来自 asp.net 应用程序的日期时间戳插入数据库,但我不断收到错误 ::

无法修改“W_Date”列 因为它要么是计算列 或者是 UNION 运算符的结果。

有人可以解释一下吗?此外,我在标签中自动化我的 asp 中的日期时间,然后使用以下代码提取 sql 插入的文本。

lblDate.Text = DateTime.Now.ToString();

这是正确的吗?

以下是我存储的 Proc 代码:

@date date
AS
BEGIN
  INSERT INTO tbl_Wiki(W_Title, C_ID, W_Date)
  VALUES (@title, @c_ID, GETDATE())
END

【问题讨论】:

  • 如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行,然后单击编辑器上的“代码示例”按钮 ({ })工具栏以很好地格式化和语法突出显示它!如果您发布错误消息,使用块引号 (` " ` ) 正确格式化错误消息。

标签: c# sql-server tsql datetime stored-procedures


【解决方案1】:

假设 W_Title 是正确的列名,听起来您的 ASP.NET 代码没有任何问题。您是否对架构有足够的控制权来查看 W_Title 是否是计算列?

此外,您似乎将“日期”作为参数传递给您的 proc,但您没有在 INSERT 语句中使用它。如果 W_Date 是一个始终为当前日期的计算列,则应删除插入语句中的 W_Date 参数。

【讨论】:

  • 感谢 Lance,我才发现我问了世界上最愚蠢的问题。当我使用 GETDATE() 时,我的日期会自动从我的存储过程中触发,实际上我不需要将它扔到我的 asp 页面甚至存储过程中。
【解决方案2】:

检查表tbl_Wiki 中列W_Date 的定义。它可能是一个计算列,这意味着你不能修改它。

您可以使用此查询来检查是否计算了列:

select  is_computed 
from    sys.columns 
where   object_id = object_id('tbl_Wiki') 
        and name = 'W_Date'

计算列示例:

create table Sample (a int, b int, c as sqrt(a*a+b+b))

这里,每次检索行时都会计算c。您不能通过在 insertupdate 期间指定值来否决计算。

【讨论】:

    猜你喜欢
    • 2018-10-15
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多