sql >> Database teknologi >  >> RDS >> Sqlserver

Adgang til SQL Server lagret procedure output parameter i C#

Jeg vil foreslå, at du sætter din SqlConnection og SqlCommand til at bruge blokke, så deres korrekte bortskaffelse er garanteret.

Hvis jeg ikke tager fejl, er outputparametrene kun tilgængelige, når du fuldstændigt har læst det resulterende datasæt, der returneres.

Da du tilsyneladende slet ikke har brug for det - hvorfor ikke bare bruge .ExecuteNonQuery() i stedet? Løser det problemet?

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

Også:da det ser ud til, at du kun virkelig er interesseret i rækkeantallet - hvorfor ikke forenkle din lagrede procedure til noget som dette:

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

og brug derefter denne snippet i din C#-kode:

con.Open(); object result = cmd.ExecuteScalar(); if(result != null) { int ans = Convert.ToInt32(result); } con.Close();

  1. Jeg kan tilsyneladende ikke finde ud af, hvordan jeg opdaterer min sidste inlog-tid

  2. Duplikere en MySQL-tabel, indekser og data

  3. Hvorfor får jeg java.lang.AbstractMethodError, når jeg prøver at indlæse en blob i db'en?

  4. Hvad er forskellen mellem varchar og nvarchar?