0

以前有一些这样的问题,但我并没有真正理解答案。这是我的查询

using (SqlCommand cmd = new SqlCommand(
    "INSERT INTO Results VALUES(@ResultID, @HasSucceeded, @ScenarioID, @Screenshot)",
    conn))
{
    cmd.Parameters.AddWithValue("@ResultID", Id);
    cmd.Parameters.AddWithValue("@HasSucceeded", HasSucceeded);
    cmd.Parameters.AddWithValue("@ScenarioID", Id);
    cmd.Parameters.AddWithValue("@Screenshot", screenshot);

    cmd.ExecuteNonQuery();
}

现在我将Id其用作 for 的占位符@ResultID。我真正想做的是autoincrement @ResultID这个INSERT INTO查询。我怎样才能做到这一点?

4

1 回答 1

3

将其设为 IDENTITY 列(例如 IDENTITY(1,1))并让数据库管理它。试图从外部管理它是一个线程噩梦。然后它变成了(注意由于将 Id 用于 2 列,它异常复杂,这听起来像是一个错误):

int newId = 0;

using (SqlCommand cmd = new SqlCommand(
    @"INSERT INTO Results (HasSucceeded, Screenshot)
      VALUES (@HasSucceeded, @Screenshot);
      DECLARE @ResultID int = SCOPE_IDENTITY();
      UPDATE Results SET ScenarioID = @ResultID
                     WHERE ResultID = @ResultID;
      SELECT @ResultID;", conn))
{
    cmd.Parameters.AddWithValue("@HasSucceeded", HasSucceeded);
    cmd.Parameters.AddWithValue("@Screenshot", screenshot);

    newId = (int)cmd.ExecuteScalar();
}

// ...Use newId here...
于 2013-07-19T17:49:38.153 回答