C# 插入的SQL输出
我在一个页面上有两个按钮,一个记录开始时间,一个记录结束时间 “开始时间”按钮执行sql插入。 此时,我需要抓取主键create。为此,我想使用sql命令(插入输出) 然后,当单击停止时间时,应该使用where子句中的主键从开始使用停止时间更新行。 我相信insertsql是正确的,但我不知道如何将主键传递给下一个命令 代码转储,与我到目前为止C# 插入的SQL输出,c#,sql,asp.net,C#,Sql,Asp.net,我在一个页面上有两个按钮,一个记录开始时间,一个记录结束时间 “开始时间”按钮执行sql插入。 此时,我需要抓取主键create。为此,我想使用sql命令(插入输出) 然后,当单击停止时间时,应该使用where子句中的主键从开始使用停止时间更新行。 我相信insertsql是正确的,但我不知道如何将主键传递给下一个命令 代码转储,与我到目前为止 var command1 = "INSERT INTO [Time] ([Start Time], [Work Order]) OUTPUT INSER
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();
}
}
不是让它转到标签,而是让它转到一个int,然后用int设置标签文本。然后在第二部分传递int。但是,将int声明在using语句的范围之外,否则它将被释放,当您稍后尝试调用它时,您将得到一个null引用异常 编辑:要添加,如果您转换为存储过程并定义SqlParameter对象(您没有它们,您将需要它们),这会更好
为什么不使用存储过程??在存储过程中,您可以轻松地执行此操作
cmd.Parameters.AddWithValue(“@PrimaryKey”,PrimaryKey from INSERT output
绝对不是一种很好的方法。`创建一个存储过程,学习如何使用SqlParameter
以及如何使用ParameterDirection。output
在存储过程中执行此操作,并在存储过程中分配您的输出参数=选择范围_标识()因为pkI以前从来没有做过存储过程,所以我先尝试了不同的事情。我只是在空闲时间编写代码。在我这样做之前,我想看看是否还有其他我更习惯的方法。@Itomship你能标记答案以便在类似的问题中引用吗?我想你在插入到返回新插入的PrimaryKey,他应该使用如下内容SqlParameter outputKeyId=new-SqlParameter(“@PrimaryKey”,SqlDbType.Int);outputKeyId.Direction=ParameterDirection.Output;
我建议创建一个存储过程并将其中一个参数设置为Output…@DJKRAZE是的,我也会执行存储过程并定义方向-但这个问题在我看来似乎是一个基本的逻辑流问题。我还补充了一点。alykins
我同意这个操作这里出现了多个问题正如我上面所说,我以前从未做过存储过程工作,所以我正在尝试我习惯的方法。听起来我需要做一个存储过程,所以我将开始尝试。谢谢。现在是学习新技术的最好时机。扩展你的思维,尝试跳出框框思考
int myPK;
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();
myPk = Convert.ToInt32(cmd1.ExecuteScalar());
Label1.Text = myPk.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", myPK);
FindControl("Work_OrderLabel"); ;
cnn.Open();
cmd.ExecuteNonQuery();
}
}