【问题标题】:Insert server datetime using a SqlCommand使用 SqlCommand 插入服务器日期时间
【发布时间】:2009-08-31 10:47:36
【问题描述】:

我有一个 SqlCommand,它使用 SqlParameter 将日期时间插入列中。目前我使用 DateTime.Now 作为这个参数的值。

我相信这会在用户的 PC 上添加不一致的日期时间。

如何更改此设置以便插入数据库服务器的日期时间?

编辑:

我应该说清楚这只是为了插入

【问题讨论】:

    标签: .net sql sql-server ado.net


    【解决方案1】:

    不要传入当前日期的参数;让 SQL Server 生成它。

    执行您所描述的操作的 SQL 是 GETDATE(),但您可能需要考虑使用 GETUTCDATE(),因为它在时区更改(以及移动服务器!)方面表现得更好

    更多详情请见MSDN

    【讨论】:

    • 能否将 SQL Server 函数指定为 SQLParameter 的值?如果不是,我认为最好的方法是使用另一个答案中建议的默认约束
    • 我不认为它可以。如果您当前直接插入表中,默认约束会很好地工作 - 我假设这是更大的存储过程的一部分。
    • +1:恕我直言,这最好的解决方案。尽管如此,如果使用 DataSet,则可以使用 DateColumn.DateTimeMode 让所有用户都有一致的 TimeZone 设置(我假设是 Utc)。见:msdn.microsoft.com/en-us/library/…
    • @Dave:您可以按照 marc_s 的建议添加 DEFAULT CONSTRAINT,或者您可以在您的 SP 中调用 GETDATE()。在这两种情况下,您都不会将该值作为参数传递给 SP。
    • @van:确实——默认约束在任何一种情况下都可以使用。如果我已经有一个 sproc,我可能会将逻辑保留在 sproc 中而不是表定义中,但每个都是自己的。
    【解决方案2】:

    这仅适用于 INSERT 吗?还是更新?

    如果仅用于 INSERT,您可以在 SQL Server 端的 DATETIME 列上声明一个 DEFAULT 约束,然后不从客户端插入值 - 因此使用服务器的默认值。

    在 SQL 中:

     ALTER TABLE YourTable 
       ADD CONSTRAINT DF_YourTable_YourColumn
         DEFAULT (GETDATE()) FOR YourColumn
    

    然后在您的 SQL 命令中,不要提及“YourColumn”,也不要为其提供值 - 服务器将使用 getdate() 来获取服务器上的当前日期/时间。

    马克

    【讨论】:

      【解决方案3】:

      在这种情况下,不要将日期时间值作为参数传递。而是使用 GetDate() 函数并将结果插入表中

      插入 X (Id, Col1, Col2) 值 (1, 'Customer1', GetDate())

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        您可以使用存储过程和 GETDATE(),

        tableName(no: int, name: varchar(40), date datetime)

        存储过程

        CREATE PROCEDURE  AddRec
        @no int,
        @name varchar(40)
        AS
        insert into tableName
         values (@no,@name,getdate())
        RETURN
        

        执行存储过程的代码

        SqlConnection cn=new SqlConnection("Your_Cn_Str");
        SqlCommand cmd=new SqlCommand();
        cmd.CommandText="AddRec";
        cmd.CommandType=CommandType.StoredProcedue;
        cmd.Connection=cn;
        
        cmd.Parameters.AddWithValue("@no",10);
        cmd.Parameters.AddWithValue("@name","Foo");
        
        cn.Open();
        cmd.ExecuteNonQuery();
        cn.Close();
        

        【讨论】:

          【解决方案5】:

          【讨论】:

          • 这是针对 SQL 7 的......它仍然只是在线图书的副本,从未更新
          猜你喜欢
          • 2011-10-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-22
          • 1970-01-01
          • 2013-04-19
          • 1970-01-01
          相关资源
          最近更新 更多