Saya memiliki program c # klien yang menjalankan prosedur tersimpan melalui ExectueNonQuery
, termasuk menangkap PRINT
output dan Kesalahan dengan peristiwa InfoMessage. Ini berfungsi dengan baik, tapi saya perhatikan ada yang aneh.
Ketika saya menjalankan prosedur tersimpan dari SSMS, ini menampilkan rowcounts untuk setiap pernyataan SQL individu yang dieksekusi di tab Pesan (seolah-olah itu berasal dari InfoMessages). Namun program saya tidak pernah melihat pesan-pesan ini, meskipun ia menangkap semua output lain yang sama. Sebaliknya, itu hanya mengembalikan baris yang terpengaruh dalam hasil fungsi ExecuteNonQuery yang merupakan jumlah dari semua jumlah baris individu (yang agak tidak berguna).
Sebagai contoh, prosedur ini:
use [tempdb]
go
SELECT *
INTO MyCols
FROM sys.columns
go
CREATE PROC foo As
UPDATE MyCols
SET name = name + N''
-- SSMS shows (662 row(s) affected)
UPDATE MyCols
SET name = name + N''
WHERE name like '%x%'
-- SSMS shows (59 row(s) affected)
PRINT 'bar'
-- both SSMS and ExecuteNonQuery get this
-- ExecuteNonQuery returns 721 rows affected
GO
Ketika foo
proc dijalankan, SSMS menampilkan jumlah baris dari 662 dan 59, tetapi ExecuteNonQuery
hanya mengembalikan total 721.
Jadi, bagaimana saya bisa mendapatkan informasi yang sama dengan SSMS?
Hanya untuk menjadi jelas di sini: Saya tidak tertarik dengan cara mengubah prosedur tersimpan untuk menambahkan PRINT @@ROWCOUNT
setelah setiap pernyataan SQL. Saya tahu bagaimana melakukan itu dan itu bukan pilihan sebagian besar waktu karena berbagai alasan.
Saya bertanya bagaimana melakukan apa yang dilakukan SSMS di sini. Saya dapat mengubah kode klien semua yang saya inginkan pada saat ini (untuk saat ini, toh) dan saya ingin melakukannya dengan benar.