之前有过这样的问题,但我并不真正理解答案。这是我的查询
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
作为@ResultID
的占位符。我真正想做的是使用此autoincrement
查询@ResultID
INSERT INTO
。我怎么能这样做?
答案 0 :(得分: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...