Saya memiliki prosedur tersimpan yang memiliki tiga parameter dan saya telah mencoba menggunakan yang berikut untuk mengembalikan hasilnya:
context.Database.SqlQuery<myEntityType>("mySpName", param1, param2, param3);
Pada awalnya saya mencoba menggunakan SqlParameter
objek sebagai params tetapi ini tidak berhasil dan melemparkan SqlException
pesan berikut:
Prosedur atau fungsi 'mySpName' mengharapkan parameter '@ param1', yang tidak disertakan.
Jadi pertanyaan saya adalah bagaimana Anda dapat menggunakan metode ini dengan prosedur tersimpan yang mengharapkan parameter?
Terima kasih.
c#
sql
ado.net
linq-to-entities
entity-framework-ctp5
jempol listrik
sumber
sumber
Jawaban:
Anda harus menyediakan instance SqlParameter dengan cara berikut:
sumber
DbNull.Value
alih-alih nol menyelesaikan masalah?Anda juga dapat menggunakan parameter "sql" sebagai penentu format:
sumber
ProcName @optionalParam1 = @opVal1, @optionalParam2 = @opVal2
Contoh yang bekerja:ProcName @optionalParam1 = {0}, @optionalParam2 = {1}
Solusi ini (hanya) untuk SQL Server 2005
Kalian adalah penyelamat, tetapi seperti yang dikatakan @Dan Mork, Anda harus menambahkan EXEC ke dalam campuran. Apa yang membuat saya tersandung adalah:
:
sumber
exec
, tetapi saya dapat mengkonfirmasi bahwa saya mendapatkan pengecualian jika saya menghilangkannya.exec
kata kunci. +1 untuk penghapusan @ pada params, yang selalu mengacaukan saya.//Atau
//Atau
//Atau
sumber
Sebagian besar jawaban rapuh karena mereka bergantung pada urutan parameter SP. Lebih baik memberi nama par Stored Proc dan memberikan nilai parameter untuk itu.
Untuk menggunakan param Bernama saat memanggil SP Anda, tanpa khawatir tentang urutan parameter
Menggunakan parameter bernama SQL Server dengan ExecuteStoreQuery dan ExecuteStoreCommand
Menjelaskan pendekatan terbaik. Lebih baik daripada jawaban Dan Mork di sini.
Misalnya:
sumber
sqlParams
variabelatau
atau
atau
sumber
Saya menggunakan metode ini:
Saya suka karena saya baru saja memasukkan Guids dan Datetimes dan SqlQuery melakukan semua format untuk saya.
sumber
@ Tom Halladay jawaban benar dengan menyebutkan bahwa Anda shopuld juga memeriksa nilai-nilai nol dan mengirim DbNullable jika params nol karena Anda akan mendapatkan pengecualian seperti
Kueri parameterisasi '...' mengharapkan parameter '@parameterName', yang tidak disertakan.
Sesuatu seperti ini membantu saya
(kredit untuk metode ini masuk ke https://stackoverflow.com/users/284240/tim-schmelter )
Kemudian gunakan seperti:
atau solusi lain, lebih sederhana, tetapi tidak generik adalah:
sumber
Saya memiliki pesan kesalahan yang sama ketika saya bekerja dengan memanggil prosedur tersimpan yang mengambil dua parameter input dan mengembalikan 3 nilai menggunakan pernyataan SELECT dan saya memecahkan masalah seperti di bawah ini di Pendekatan Pertama Kode EF
UPDATE : Sepertinya SQL SERVER 2005 hilang kata kunci EXEC menciptakan masalah. Jadi untuk membuatnya bekerja dengan semua versi SQL SERVER, saya memperbarui jawaban saya dan menambahkan EXEC di bawah baris
sumber
Saya melakukan tugas saya dengan EF 6.x seperti ini:
Jangan gandakan pada sqlparameter beberapa orang terbakar melakukan ini ke variabel mereka
sumber