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

今、私はIdfor へのプレースホルダーとして使用してい@ResultIDます。私が本当にやりたいのはautoincrement @ResultID、このINSERT INTOクエリです。これどうやってするの?

4

1 に答える 1

3

これを IDENTITY 列 (IDENTITY(1,1) など) にして、データベースに管理させます。それを外部から管理しようとするのは、スレッド化の悪夢です。次に、次のようになります (エラーのように聞こえる 2 つの列に Id を使用するため、非常に複雑であることに注意してください)。

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 に答える