Saya sarankan Anda memasukkan SqlConnection
dan SqlCommand
menggunakan balok sehingga pembuangannya dengan benar terjamin.
Selain itu, jika saya tidak salah, parameter keluaran hanya tersedia setelah Anda benar-benar membaca kumpulan data yang dihasilkan yang dikembalikan.
Karena Anda sepertinya tidak membutuhkannya sama sekali - mengapa tidak menggunakan .ExecuteNonQuery()
alih-alih? Apakah itu menyelesaikan masalah?
using (SqlConnection con = new SqlConnection("Data Source=localhost\\SQLEXPRESS;Initial Catalog=answers;Integrated Security=True"))
using (SqlCommand cmd = new SqlCommand("dbo.GetRowCount", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int));
cmd.Parameters["@count"].Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery(); // *** since you don't need the returned data - just call ExecuteNonQuery
int ans = (int)cmd.Parameters["@count"].Value;
con.Close();
Console.WriteLine(ans);
}
Juga :karena sepertinya Anda hanya benar-benar tertarik pada jumlah baris - mengapa tidak menyederhanakan prosedur tersimpan Anda menjadi seperti ini:
ALTER PROCEDURE GetRowCount
AS
SELECT COUNT(*) FROM Emp WHERE age > 30;
dan kemudian gunakan cuplikan ini dalam kode C# Anda:
con.Open();
object result = cmd.ExecuteScalar();
if(result != null)
{
int ans = Convert.ToInt32(result);
}
con.Close();