Menunjukkan respon lainnya ini, tapi pada dasarnya Anda hanya perlu membuat SqlParameter, mengatur Directionuntuk Output, dan menambahkannya ke SqlCommand's Parameterskoleksi. Kemudian jalankan prosedur tersimpan dan dapatkan nilai parameternya.
Menggunakan contoh kode Anda:
// SqlConnection and SqlCommand are IDisposable, so stack a couple using()'s
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand("sproc", conn))
{
// Create parameter with Direction as Output (and correct name and type)
SqlParameter outputIdParam = new SqlParameter("@ID", SqlDbType.Int)
{
Direction = ParameterDirection.Output
};
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(outputIdParam);
conn.Open();
cmd.ExecuteNonQuery();
// Some various ways to grab the output depending on how you would like to
// handle a null value returned from the query (shown in comment for each).
// Note: You can use either the SqlParameter variable declared
// above or access it through the Parameters collection by name:
// outputIdParam.Value == cmd.Parameters["@ID"].Value
// Throws FormatException
int idFromString = int.Parse(outputIdParam.Value.ToString());
// Throws InvalidCastException
int idFromCast = (int)outputIdParam.Value;
// idAsNullableInt remains null
int? idAsNullableInt = outputIdParam.Value as int?;
// idOrDefaultValue is 0 (or any other value specified to the ?? operator)
int idOrDefaultValue = outputIdParam.Value as int? ?? default(int);
conn.Close();
}
Berhati-hatilah saat mendapatkan Parameters[].Value, karena jenisnya perlu diubah dari objectapa yang Anda nyatakan. Dan SqlDbTypedigunakan saat Anda membuat SqlParameterkebutuhan untuk mencocokkan tipe dalam database. Jika Anda hanya akan mengeluarkannya ke konsol, Anda mungkin hanya menggunakan Parameters["@Param"].Value.ToString()(baik secara eksplisit maupun implisit melalui fileConsole.Write()String.Format() panggilan atau ).
EDIT: Lebih dari 3,5 tahun dan hampir 20k tampilan dan tidak ada yang peduli untuk menyebutkan bahwa itu bahkan tidak dikompilasi untuk alasan yang ditentukan dalam komentar "hati-hati" saya di posting asli. Bagus. Diperbaiki berdasarkan komentar bagus dari @Walter Stabosz dan @Stephen Kennedy dan untuk mencocokkan kode pembaruan, edit dalam pertanyaan dari @abatishchev.
conn.Close()karena di dalamusingblok