在INSERT查询中使用GETDATE(),它可以将该日期返回给我吗?

时间:2015-09-29 18:47:22

标签: c# sql sql-server

我正在使用以下代码将行插入数据库并使用GETDATE()设置日期。如果没有运行第二个单独的查询来拉回该日期,在同一个查询中是否有一种方法可以让它返回刚刚插入的日期?

int resultCompletedDate = 0;

using (SqlConnection connect = new SqlConnection(connectionString))
{
    string updateQueryCompletedDate = @"UPDATE Conversions 
                                        SET CompletedDate = GETDATE(),
                                        Status = 'Completed'
                                        WHERE ID = @ID"; 

    SqlCommand command1 = new SqlCommand(updateQueryCompletedDate, connect);
    command1.Parameters.AddWithValue("ID", item1.ID);

    connect.Open();
    resultCompletedDate = Convert.ToInt32(command1.ExecuteScalar());
    connect.Close();
}

3 个答案:

答案 0 :(得分:2)

使用批处理语句作为命令文本。由于您没有使用反斜杠或双引号,因此您不需要逐字字符串。

DECLARE @completedDate datetime = GETDATE();
UPDATE Conversions SET CompletedDate = @completedDate, Status = 'Completed' WHERE Id = @id;
SELECT @completedDate;

请勿使用Convert.ToInt32,而只需使用Convert.ToDateTime

Protip:使用using而非手动关闭连接,因为如果ExecuteScalar引发异常,您的连接将无法关闭:

using(SqlConnection c = new SqlConnection( ... ))
using(SqlCommand cmd = c.CreateCommand()) {
    cmd.CommandText = "DECLARE @completedDate...";
    cmd.Parameters.AddWithValue("@id", item1.ID);
    c.Open();
    DateTime completedDate = Convert.ToDateTime( cmd.ExecuteScalar() );
    return completedDate;
}

答案 1 :(得分:1)

您还可以使用OUTPUT clause

using (var connect = new SqlConnection(connectionString))
{
    connect.Open();
    var command1 = new SqlCommand(@"
        UPDATE      Conversions 
            SET     CompletedDate = GETDATE(),
                    Status = 'Completed'
            WHERE   ID = @ID
            OUTPUT  INSERTED.CompletedDate", connect);
    command1.Parameters.AddWithValue("ID", item1.ID);

    resultCompletedDate = Convert.ToDateTime(command1.ExecuteScalar());
}

答案 2 :(得分:0)

为什么不将日期传递给查询呢?

list1[i,j] = Convert.ToDouble(Console.ReadLine());

唯一的区别是客户端和服务器之间可能存在时区差异。