我正在使用以下代码将行插入数据库并使用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();
}
答案 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());
唯一的区别是客户端和服务器之间可能存在时区差异。