sql >> Databáze >  >> RDS >> Sqlserver

Přístup k výstupnímu parametru uložené procedury SQL Server v C#

Navrhoval bych, abyste vložili SqlConnection a SqlCommand do používání bloků tak, aby byla zaručena jejich správná likvidace.

Také, pokud se nepletu, výstupní parametry jsou dostupné až poté, co si kompletně přečtete výslednou datovou sadu, která se vrací.

Protože se zdá, že to vůbec nepotřebujete, proč nepoužít .ExecuteNonQuery() namísto? Vyřeší to problém?

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

Také:protože se zdá, že vás skutečně zajímá pouze počet řádků - proč nezjednodušit uloženou proceduru na něco takového:

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

a poté použijte tento fragment ve svém kódu C#:

    con.Open();

    object result = cmd.ExecuteScalar();

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

    con.Close();


  1. Problém databáze UTF-8

  2. Používá MySQL indexy na Having?

  3. mysqli_query() vždy vrátí true

  4. Chyba příliš mnoha otevřených souborů na Ubuntu 8.04