3

値を返すSQLServerのストアドプロシージャがあります。

CREATE PROCEDURE [dbo].[insertProc]
    @value1 INT,
    @value2 INT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO table1(value1,value2) VALUES (@value1,@value2)

    RETURN SCOPE_IDENTITY();
END

次のように構成されたSQLデータソースを使用して、ASP.NETからDBに接続します。

InsertCommand="@insertedId = insertProc"
InsertCommandType="StoredProcedure"

oninserting="sqlDS_Inserting" 
oninserted="sqlDS_Inserted"

<InsertParameters>
    <asp:Parameter Name="value1" />
    <asp:Parameter Name="value2" />
    <asp:Parameter Name="insertedId" DbType="Int32" Direction="ReturnValue" />
</InsertParameters>

戻り値を取得するために何をしたいのか。手順の本体では、sqlDS_Inserted私はこれが好きです:

this.insertedId = Convert.ToInt32(e.Command.Parameters["insertedId"].Value);

しかし、エラーが発生します:

Object cannot be cast from DBNull to other types.

ただし、SQL Server Profilerを確認してコマンドを実行すると(@insertedId変数の宣言を追加)、正常に機能します。問題は何ですか?ASP.NETからストアドプロシージャの戻り値を取得するにはどうすればよいですか?

4

2 に答える 2

2

この声明はあなたの問題だと思います。

InsertCommand="@insertedId = insertProc"

ストアドプロシージャの戻り値を戻り値パラメータに明示的に割り当てる必要はありません。ストアドプロシージャの名前を指定するだけです。

 InsertCommand = "InsertProc"

OnInsertedもう1つは、イベントハンドラーのパラメーター名の前に「@」を付ける必要があることです。

this.insertedId = Convert.ToInt32(e.Command.Parameters["@insertedId"].Value);
于 2009-11-05T02:51:54.760 に答える
0

これを試して:

{ 
    SqlConnection conMyData = default(SqlConnection); 
    SqlCommand cmdInsert = default(SqlCommand); 
    SqlParameter parmReturnValue = default(SqlParameter); 
    long l = 0; 

    conMyData = new SqlConnection(_SQLDBConnString); 
    cmdInsert = new SqlCommand("insEmployee", conMyData); 

    { 
        cmdInsert.CommandType = CommandType.StoredProcedure; 
        parmReturnValue = cmdInsert.Parameters.Add("RETURN_VALUE", SqlDbType.BigInt); 
        parmReturnValue.Direction = ParameterDirection.ReturnValue; 
        cmdInsert.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = strFirstName; 
        cmdInsert.Parameters.Add("@MiddleInitial", SqlDbType.VarChar).Value = strMI; 
        conMyData.Open(); 
        cmdInsert.ExecuteNonQuery(); 
        l = (long)cmdInsert.Parameters("RETURN_VALUE").Value; 
    } 

    return l; 
} 
于 2009-11-04T18:25:38.850 に答える