sql >> Database >  >> RDS >> Sqlserver

Toegang tot SQL Server opgeslagen procedure uitvoerparameter in C#

Ik raad je aan om je SqlConnection en SqlCommand in het gebruik van blokken, zodat de juiste verwijdering ervan gegarandeerd is.

Als ik me niet vergis, zijn de uitvoerparameters ook alleen beschikbaar nadat u de resulterende gegevensset die wordt geretourneerd, volledig hebt gelezen.

Aangezien je dat helemaal niet nodig lijkt te hebben, waarom gebruik je dan niet gewoon .ExecuteNonQuery() in plaats van? Lost dat het probleem op?

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

Ook:aangezien het lijkt alsof je alleen echt geïnteresseerd bent in het aantal rijen - waarom zou je je opgeslagen procedure niet vereenvoudigen tot zoiets als dit:

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

en gebruik vervolgens dit fragment in uw C#-code:

    con.Open();

    object result = cmd.ExecuteScalar();

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

    con.Close();


  1. Hoe maak je een MySQL hiërarchische recursieve query?

  2. sql-query om record te selecteren met dezelfde id maar een andere waarde in twee kolommen

  3. Orakel -- MET CLAUSULE => SAMENVOEGEN? (Syntax error, )

  4. Records uit MySQL-database weergeven met JTable in Java