【发布时间】:2009-08-31 10:47:36
【问题描述】:
我有一个 SqlCommand,它使用 SqlParameter 将日期时间插入列中。目前我使用 DateTime.Now 作为这个参数的值。
我相信这会在用户的 PC 上添加不一致的日期时间。
如何更改此设置以便插入数据库服务器的日期时间?
编辑:
我应该说清楚这只是为了插入
【问题讨论】:
标签: .net sql sql-server ado.net
我有一个 SqlCommand,它使用 SqlParameter 将日期时间插入列中。目前我使用 DateTime.Now 作为这个参数的值。
我相信这会在用户的 PC 上添加不一致的日期时间。
如何更改此设置以便插入数据库服务器的日期时间?
编辑:
我应该说清楚这只是为了插入
【问题讨论】:
标签: .net sql sql-server ado.net
不要传入当前日期的参数;让 SQL Server 生成它。
执行您所描述的操作的 SQL 是 GETDATE(),但您可能需要考虑使用 GETUTCDATE(),因为它在时区更改(以及移动服务器!)方面表现得更好
更多详情请见MSDN。
【讨论】:
这仅适用于 INSERT 吗?还是更新?
如果仅用于 INSERT,您可以在 SQL Server 端的 DATETIME 列上声明一个 DEFAULT 约束,然后不从客户端插入值 - 因此使用服务器的默认值。
在 SQL 中:
ALTER TABLE YourTable
ADD CONSTRAINT DF_YourTable_YourColumn
DEFAULT (GETDATE()) FOR YourColumn
然后在您的 SQL 命令中,不要提及“YourColumn”,也不要为其提供值 - 服务器将使用 getdate() 来获取服务器上的当前日期/时间。
马克
【讨论】:
在这种情况下,不要将日期时间值作为参数传递。而是使用 GetDate() 函数并将结果插入表中
插入 X (Id, Col1, Col2) 值 (1, 'Customer1', GetDate())
希望对你有帮助
【讨论】:
您可以使用存储过程和 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();
【讨论】:
【讨论】: