sql >> データベース >  >> RDS >> Sqlserver

C#でSQLServerストアドプロシージャの出力パラメータにアクセスする

    SqlConnectionを配置することをお勧めします およびSqlCommand ブロックを使用して、適切な廃棄が保証されるようにします。

    また、私が間違っていない場合、出力パラメータは、返される結果のデータセットを完全に読み取った後でのみ使用できます。

    それはまったく必要ないようですので、.ExecuteNonQuery()を使用してみませんか。 代わりは?問題は解決しましたか?

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

    また、行数にのみ関心があるように思われるので、ストアドプロシージャを次のように単純化してみませんか。

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

    次に、C#コードでこのスニペットを使用します:

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


    1. XAMPP-MySQLが予期せずシャットダウンしました

    2. MERGE は SQL2008 のアトミック ステートメントですか?

    3. MYSQLの動的列名

    4. PostgreSQLでSSLを有効にする方法