SQL输出已插入

时间:2014-09-19 15:58:28

标签: c# sql asp.net

我在页面上有两个按钮,一个记录开始时间,另一个记录结束时间。

开始时间按钮执行sql插入。 那时我需要抓住创建的主键。为此,我想使用sql命令(输出插入)。

然后,当单击停止时间时,应使用where子句中start的主键以停止时间更新行。 我相信插入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();
    }
}

1 个答案:

答案 0 :(得分:1)

而不是让它去标签让它转到int然后用int设置标签文本。然后在第二部分传递int。在using语句的范围之外声明int,或者它将被处理,当你稍后尝试调用它时,你会得到一个空引用异常。

编辑:要添加,如果您转换为存储过程并定义SqlParameter对象(您没有它们,则需要它们)会更好。

SqlParameter

    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();
        }
    }