2009年3月19日木曜日

[.NET]INSERT時の自動採番される値を取得する(SQLSERVER)(その4)

GDD Blog: [.NET]INSERT時の自動採番される値を取得する(SQLSERVER)(その2)では、SQL(T-SQL)のレベルで、自動生成されるIDのことを書きましたが、これをADO.NETで実装してみました。コードはこんな感じ。

private void button1_Click(object senderEventArgs e)
{
    //using System.Data.SqlClient;

    //INSERT文の後ろにSELECT文をくっつけておく
    string sql = "INSERT INTO tblTEST(text1,text2)"
           + " VALUES (@text1,@text2);"
           + "SELECT @id = IDENT_CURRENT('tblTEST')";


    using(SqlConnection con = new SqlConnection(CON_STR))
    using(SqlCommand cmd = new SqlCommand(sql,con)){

        con.Open();

        //INSERT用のデータをセットする
        cmd.Parameters.Add("@text1"SqlDbType.VarChar10).Value = "text1";
        cmd.Parameters.Add("@text2"SqlDbType.VarChar10).Value = "text2";
        //OUTパラメータをセットする
        cmd.Parameters.Add("@id"SqlDbType.Int).Direction = ParameterDirection.Output;

        //SQL実行
        int result = cmd.ExecuteNonQuery();

        //結果表示
        System.Diagnostics.Debug.WriteLine(String.Format("Result ={0} ID={1}",resultcmd.Parameters["@id"].Value));

        con.Close();
    }
}


■実行結果(すでに10レコード入っている)
Result =1 ID=11


■DBの状態

p_key text1 text2
----------- ---------- ----------
1 NULL NULL
2 text1 text2
3 text1 text2
4 text1 text2
5 text1 text2
6 text1 text2
7 text1 text2
8 text1 text2
9 text1 text2
10 text1 text2

0 件のコメント: