C# · 12月 30, 2021

c# – 如何在SQL Server中存储/检索时间戳?

我有一个表,其中每行需要一个标记其插入时间的时间戳.我没有很多的数据库体验,但有些事情告诉我,这最好在数据库端自动处理,例如通过存储过程.

在MS sql中有一个时间戳数据类型,但是读取它,它被视为一系列数字,而不是作为C#中的DateTime对象.那么如果我不得不进行转换,那么它不能只是一个NVARCHAR数据类型?

所以简单地说,当插入到表中时,最简单的方法是(自动?)在行上放置一个时间戳?

编辑:表的定义很简单.目前它只有两列,仍然缺少时间戳列.

sqlCommand command = con.CreateCommand(); command.CommandText = “INSERT INTO Bio VALUES (” + “@ID,@Name)”; command.Parameters.AddWithValue(“ID”,number); command.Parameters.AddWithValue(“Name”,name); try { sqlDataReader thisReader = command.ExecuteReader(); thisReader.Close(); } catch { // Do something };

解决方案好的,现在工作了.我首先尝试通过Visual Studio 2008中的“服务器资源管理器”窗口添加新列.查找我的数据库,右键单击并选择“新建查询”.然后输入类似的东西

ALTER TABLE dbo.MyTable ADD CreatedDate datetime NOT NULL DEFAULT (GetUtcDate())

但是我收到了这个消息

The ALTER TABLE sql construct is not supported
The query cannot be represented graphically in the Diagram and Criteria Pane.

所以我以图形方式添加了它.第一个“打开表定义”,并在“数据类型”下的“列名称”和“日期时间”下添加CreatedDate.删除允许空值检查.然后在我添加的列属性

getutcdate()

在“一般”部分的行中,称为“默认值或绑定”.每当插入新行时,数据库将自动将其当前日期和时间作为时间戳给出.

解决方法 在表中创建一个CreatedDate列,就像这样创建一个列: ALTER TABLE dbo.MyTable ADD CreatedDate datetime NOT NULL DEFAULT (GetUtcDate())

编辑:如果之后,您希望在该记录的每次更新中更新该值,您可以将GetUtcDate()重新分配给该列或另一个列(我称之为Createddate,因此不应在更新中使用,但您可以添加另一个一个或重命名它Modifieddate).我肯定会在UPDATE的存储过程中包含这样的列的更新,这里不需要触发器.