Menunjukkan respon lainnya ini, tapi pada dasarnya Anda hanya perlu membuat SqlParameter
, mengatur Direction
untuk Output
, dan menambahkannya ke SqlCommand
's Parameters
koleksi. 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 object
apa yang Anda nyatakan. Dan SqlDbType
digunakan saat Anda membuat SqlParameter
kebutuhan 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 dalamusing
blokUntuk siapa pun yang ingin melakukan sesuatu yang serupa menggunakan reader dengan prosedur tersimpan, perhatikan bahwa reader harus ditutup untuk mengambil nilai output.
sumber
Bukan kode saya, tapi saya pikir contoh yang bagus
sumber: http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=624
sumber
Font http://www.codeproject.com/Articles/748619/ADO-NET-How-to-call-a-stored-procedure-with-output
sumber
sumber
Anda bisa mendapatkan hasil Anda dengan kode di bawah ini:
sumber
Buat SqlParamObject yang akan memberi Anda kontrol untuk mengakses metode pada parameter
:
SET Nama untuk parameter Anda (itu harus b sama seperti Anda akan mendeklarasikan variabel untuk menyimpan nilai di DataBase Anda)
:
param.ParameterName = "@yourParamterName";
Hapus pemegang nilai untuk menampung data keluaran Anda
:
param.Value = 0;
Tetapkan Arah Pilihan Anda (Dalam kasus Anda itu harus Output)
:
param.Direction = System.Data.ParameterDirection.Output;
sumber
Itu terlihat lebih eksplisit bagi saya:
sumber