0

データベースに簡単なINSERTクエリを実行しています。列idには自動生成された ID があり、別のクエリに必要です。出力方向のパラメーターを使用して生成された ID を取得できることを読んだので、次のコードを書きました。

string id;
queryString = "INSERT INTO tr_text (form, item, enabled, programID) VALUES (@myForm, @myItem, 1, @myProgramID)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand command = new SqlCommand(queryString, connection);
    connection.Open();
    command.CommandText = queryString;
    command.Parameters.Add("@myForm", SqlDbType.NVarChar, 50).Value = form;
    command.Parameters.Add("@myItem", SqlDbType.NVarChar, 50).Value = item;
    command.Parameters.Add("@myProgramID", SqlDbType.Int).Value = 1;
    SqlParameter param = new SqlParameter("@id", SqlDbType.Int, 0, "id");
    param.Direction = ParameterDirection.Output;
    command.Parameters.Add(param);
    command.ExecuteNonQuery();
    id = command.Parameters["@id"].Value.ToString();
 }

クエリは正しく実行されます (データベースに正しい新しいレコードがあります) が、id変数はまだ空です! どうすればそのコードを機能させることができますか?

4

2 に答える 2

3

そのようにクエリを変更してください。

 INSERT INTO tr_text (form, item, enabled, programID) 
 OUTPUT INSERTED.ID
 VALUES (@myForm, @myItem, 1, @myProgramID)

そのような ExecuteNonQuery() の代わりに ExecuteScalar() を使用します。

 Int32 id= (Int32) command.ExecuteScalar();
于 2013-06-13T08:28:23.667 に答える
1

@id に値を設定していないため、クエリを変更してください

INSERT INTO tr_text (form, item, enabled, programID) VALUES (@myForm, @myItem, 1, @myProgramID) 
set @id = SCOPE_IDENTITY();
于 2013-06-13T08:28:17.293 に答える