मेरा सुझाव है कि आप अपना SqlConnection
डालें और SqlCommand
ब्लॉक का उपयोग करना ताकि उनके उचित निपटान की गारंटी हो।
साथ ही, अगर मैं गलत नहीं हूं, तो आउटपुट पैरामीटर केवल तभी उपलब्ध होते हैं जब आप परिणामी डेटा सेट को पूरी तरह से पढ़ चुके होते हैं जो लौटाया जा रहा है।
चूंकि आपको इसकी बिल्कुल भी आवश्यकता नहीं है - क्यों न केवल .ExecuteNonQuery()
का उपयोग करें। बजाय? क्या इससे समस्या ठीक हो जाती है?
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);
}
इसके अलावा:चूंकि ऐसा लगता है कि आप केवल पंक्ति गणना में रुचि रखते हैं - क्यों न अपनी संग्रहीत प्रक्रिया को कुछ इस तरह सरल बनाया जाए:
ALTER PROCEDURE GetRowCount
AS
SELECT COUNT(*) FROM Emp WHERE age > 30;
और फिर इस स्निपेट को अपने C# कोड में उपयोग करें:
con.Open();
object result = cmd.ExecuteScalar();
if(result != null)
{
int ans = Convert.ToInt32(result);
}
con.Close();