1
SqlDataSource myQuiz = new SqlDataSource();

myQuiz.ConnectionString = ConfigurationManager.ConnectionStrings["yafnet"].ToString();
myQuiz.InsertCommand = "INSERT INTO [QuizTable]([Quiz_Title],[Quiz_Description]) VALUES (@Quiz_Title,@Quiz_Description)";

myQuiz.InsertParameters.Add("Quiz_Title",Quiz_Title.Text);
myQuiz.InsertParameters.Add("Quiz_Description",Quiz_Description.Text);

myQuiz.Insert();
Response.Redirect("QuizQuests.aspx");

新しい行の自動生成された ID を取得してローカル変数に入れる方法はありますか?

事前にどうもありがとう、エイドリアン

4

3 に答える 3

2

使用する

SELECT IDENT_CURRENT(‘QuizTable’)

値を作成した接続や、値を作成したステートメントのスコープに関係なく、テーブルで最後に作成された IDENTITY 値を返します。IDENT_CURRENT はスコープとセッションによって制限されません。指定されたテーブルに限定されます。IDENT_CURRENT は、任意のセッションおよび任意のスコープで特定のテーブルに対して生成された ID 値を返します。

于 2012-04-28T06:55:42.173 に答える
1

実際の挿入からIDを100%確実に取得したい場合は、(Luiggi Mendozaのコメントですでに述べたように)を使用する必要があります。またはを使用しないQuizTableでください。SCOPE_IDENTITY()@@IDENTITYIDENT_CURRENT

@@IDENTITY接続から発生した最後の挿入からIDが返されるため、機能しない可能性があります。したがってQuizTable、ID列を持つ別のテーブルに行を挿入するトリガーがある場合@@IDENTITY、元の挿入の値ではなく、その2番目の挿入からの値を返しますQuizTable

IDENT_CURRENTテーブルの最後のID値を返します(テーブルに対してのみなので、前の例のようなトリガーがあるかどうかは関係ありません)。
ただし、任意のセッションの最後のID値を返します。INSERTしたがって、あなたとあなたの間の別のセッションから別の行が挿入された場合IDENT_CURRENT、あなたはあなたからではなく、そのからID値を取得します。

于 2012-04-28T15:51:56.633 に答える
1

@Adrian De Barro: こんにちは、次のコードを使用して、挿入されたレコード ID を取得し、変数に保存できます

sqlquery に次のステートメントを追加します。

return @@IDENTITY

C# コードは次のようになります。

    SqlConnection cn = new   
    SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);        
    cn.Open();
    SqlCommand cmd = new SqlCommand(procname, cn);
    cmd.CommandType = CommandType.StoredProcedure;
    SqlParameter str = new SqlParameter("name", SqlDbType.VarChar);
    str.Direction = ParameterDirection.ReturnValue;
    foreach (SqlParameter par in param)
    {
        cmd.Parameters.Add(par);
    }
    string name = Convert.ToString(cmd.ExecuteScalar());
    cmd.Dispose();
    cn.Close();
    return name;
于 2012-04-28T07:09:16.533 に答える