SQL INSERT新插入行的ID

时间:2018-04-01 16:57:50

标签: c# sql-server

我正在编写一个库数据库程序。它可以插入书籍,但我在书和出租书的人之间提出了一个问题。我无法从租借表中获取最后插入的ID,以将其放入编译表,以便将书籍分配给租借它的人。我尝试过SCOPE_IDENTITY(),但它对我不起作用。这是代码:

tsconfig.json

2 个答案:

答案 0 :(得分:1)

实际上,您没有从第一个查询中检索最后插入的ID值,因为SCOPE_IDENTITY()被错误放置而您没有在任何地方分配ExecuteScalar()返回值:

String query = "INSERT INTO rents VALUES (@renterName, @rentStartDate, @rentEndDate); SELECT CONVERT(INT, SCOPE_IDENTITY())"; // "SELECT CAST(SCOPE_IDENTITY() AS INT)" can also be an option
Int32 lastId = 0;

using (f1.Connection = new SqlConnection(f1.connectionString))
using (SqlCommand command = new SqlCommand(query, f1.Connection))
{
    f1.Connection.Open();

    command.Parameters.AddWithValue("@renterName", rentNameBox.Text);
    command.Parameters.AddWithValue("@rentStartDate", DateTime.Now);
    command.Parameters.AddWithValue("@rentEndDate", rentEndDatePicker.Value);

    lastId = (Int32)command.ExecuteScalar();
}

完成此操作后,您可以继续执行第二个查询,如下所示:

String compilationQuery = "INSERT INTO compilation VALUES (@bookId, @rentId)";

using (f1.Connection = new SqlConnection(f1.connectionString))
using (SqlCommand command = new SqlCommand(compilationQuery, f1.Connection)) 
{
    f1.Connection.Open();

    command.Parameters.AddWithValue("@bookId", f1.listBook.SelectedValue);
    command.Parameters.AddWithValue("@rentId", lastId);
    // ...

答案 1 :(得分:0)

您已经处理了命令,因此SCOPE_IDENTITY()消失了。没有理由两次处理该命令。

bb