Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zugreifen auf den Ausgabeparameter gespeicherter SQL Server-Prozeduren in C#

Ich würde vorschlagen, dass Sie Ihre SqlConnection setzen und SqlCommand Blöcke zu verwenden, damit deren ordnungsgemäße Entsorgung gewährleistet ist.

Wenn ich mich nicht irre, sind die Ausgabeparameter auch erst verfügbar, nachdem Sie den resultierenden Datensatz, der zurückgegeben wird, vollständig gelesen haben.

Da Sie das anscheinend überhaupt nicht brauchen - warum nicht einfach .ExecuteNonQuery() verwenden stattdessen? Behebt das das Problem?

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);
}

Außerdem:Da es scheint, dass Sie nur wirklich an der Zeilenanzahl interessiert sind - warum vereinfachen Sie Ihre gespeicherte Prozedur nicht so:

ALTER PROCEDURE GetRowCount
AS
   SELECT COUNT(*) FROM Emp WHERE age > 30;

und verwenden Sie dann dieses Snippet in Ihrem C#-Code:

    con.Open();

    object result = cmd.ExecuteScalar();

    if(result != null)
    {
        int ans = Convert.ToInt32(result);
    }

    con.Close();