【发布时间】:2014-09-19 15:58:28
【问题描述】:
我在一个页面上有两个按钮,一个记录开始时间,一个记录结束时间。
开始时间按钮执行 sql 插入。 那时我需要获取创建的主键。为此,我想使用 sql 命令(插入输出)。
然后,当单击停止时间时,应使用 where 子句中从头开始的主键将行更新为停止时间。 我相信插入 SQL 是正确的,但我不知道如何将主键传递给下一个命令。
代码转储,我到目前为止。
var command1 = "INSERT INTO [Time] ([Start Time], [Work Order]) OUTPUT INSERTED.PrimaryKey VALUES (@StartTime, @Work_Order)";
using (SqlConnection cnn1 = new SqlConnection(cnnString))
{
using (SqlCommand cmd1 = new SqlCommand(command1, cnn1))
{
cmd1.Parameters.AddWithValue("@StartTime", SqlDbType.DateTime).Value = System.DateTime.Now;
cmd1.Parameters.AddWithValue("@Work_Order", SqlDbType.Int).Value = e.CommandArgument;
cnn1.Open();
Label1.Text = cmd1.ExecuteScalar().ToString();
cnn1.Close();
}
}
var command = "UPDATE [Time] SET [Stop Time] = @StopTime WHERE [PrimaryKey] = @PrimaryKey";
using (SqlConnection cnn = new SqlConnection(cnnString))
{
using (SqlCommand cmd = new SqlCommand(command, cnn))
{
cmd.Parameters.AddWithValue("@StopTime", SqlDbType.DateTime).Value = System.DateTime.Now;
cmd.Parameters.AddWithValue("@PrimaryKey", *PrimaryKey from INSERT output*
cnn.Open();
cmd.ExecuteNonQuery();
}
}
【问题讨论】:
-
为什么不使用存储过程??在存储过程中,您可以轻松做到这一点
-
cmd.Parameters.AddWithValue("@PrimaryKey", PrimaryKey from INSERT output绝对不是这样做的好方法。` 创建一个存储过程并学习如何使用SqlParameter以及如何使用ParameterDirection.Output在存储过程中使用存储程序分配您的 OutPut Param = SELECT SCOPE_IDENTITY() AS pk -
我以前从未做过存储过程,所以我先尝试不同的东西。我只是在空闲时间编码。在我这样做之前,我想看看是否有另一种我更习惯的方式。
-
@Itomship 您能否标记答案,以便在类似问题中引用?