Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uzyskiwanie dostępu do parametru wyjściowego procedury składowanej programu SQL Server w języku C#

Proponuję umieścić swoje SqlConnection i SqlCommand na używanie bloków, aby zagwarantować ich właściwe usuwanie.

Ponadto, jeśli się nie mylę, parametry wyjściowe są dostępne dopiero po całkowitym przeczytaniu zwracanego zestawu danych wynikowych.

Ponieważ wydaje się, że wcale tego nie potrzebujesz - dlaczego nie użyć po prostu .ExecuteNonQuery() zamiast? Czy to rozwiązuje 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);
}

Ponadto :ponieważ wydaje się, że naprawdę interesuje Cię tylko liczba wierszy, dlaczego nie uprościć procedury składowanej do czegoś takiego:

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

a następnie użyj tego fragmentu kodu w kodzie C#:

    con.Open();

    object result = cmd.ExecuteScalar();

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

    con.Close();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NIE W vs NIE ISTNIEJE

  2. BCP - Nieprawidłowa wartość znaku dla specyfikacji rzutowania podczas importu do tabeli z kolumną IDENTITY

  3. Wystąpił błąd na poziomie transportu podczas odbierania wyników z serwera

  4. Jak mogę wyłączyć aktualizację tabeli dla wszystkich użytkowników?

  5. Jak usunąć plik danych z bazy danych programu SQL Server (T-SQL)