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

C#でのストアドプロシージャの出力パラメータの使用

    ストアドプロシージャを少し変更しました(SCOPE_IDENTITYを使用するため) )そしてそれはこのように見えます:

    CREATE PROCEDURE usp_InsertContract
        @ContractNumber varchar(7),
        @NewId int OUTPUT
    AS
    BEGIN
        INSERT INTO [dbo].[Contracts] (ContractNumber)
        VALUES (@ContractNumber)
    
        SELECT @NewId = SCOPE_IDENTITY()
    END
    

    これを試してみましたが、正常に機能します(変更されたストアドプロシージャを使用):

    // define connection and command, in using blocks to ensure disposal
    using(SqlConnection conn = new SqlConnection(pvConnectionString ))
    using(SqlCommand cmd = new SqlCommand("dbo.usp_InsertContract", conn))
    {
        cmd.CommandType = CommandType.StoredProcedure;
            
        // set up the parameters
        cmd.Parameters.Add("@ContractNumber", SqlDbType.VarChar, 7);
        cmd.Parameters.Add("@NewId", SqlDbType.Int).Direction = ParameterDirection.Output;
    
        // set parameter values
        cmd.Parameters["@ContractNumber"].Value = contractNumber;
    
        // open connection and execute stored procedure
        conn.Open();
        cmd.ExecuteNonQuery();
    
        // read output value from @NewId
        int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);
        conn.Close();
    }
    

    これはあなたの環境でも機能しますか?元のコードが機能しない理由はわかりませんが、ここでVS2010とSQL Server 2008 R2を実行すると、問題なく機能します。...

    値が返されない場合は、テーブルのContractsが疑われます IDENTITYの列が実際にはない可能性があります その上のプロパティ。



    1. 特定のスキーマに対するユーザー特権を付与する方法は?

    2. pgBadgerを使用したPostgreSQLログ分析

    3. コードカバレッジ統計

    4. mysqlのgroup_concatに似たOracleの関数はありますか?