0

私はこれについて何日も検索しましたが、SQL接続がC#コードで行われている可能性がたくさんあることを発見しましたが、私のようなweb.configおよび.aspxページを使用して接続が行われている場所は見つかりません.

問題: SQLdatasource1 にストアド プロシージャを使用した Insert があります。SP は重複 ID (MRN) をチェックし、見つかった場合は 0 を返し、見つからない場合は 1 を返します。重複がない限り、挿入も実行されます。それはすべて問題ありません。

ただし、ReturnValue を取得し、0 または 1 をチェックして、結果に応じてユーザーにメッセージを表示したいと考えています。これが私が取り組んでいるものです。簡単にするために省略されています。フォームは、InsertItemTemplate を持つ asp:formview であり、すべてのコントロールが含まれています。

<asp:sqldatasource ID="sqldatasource1" runat="server"
ConnectionString="<%$ ConnectionStrings:... %>"
ProviderName="..."
...
<InsertParameters>
     <asp:Parameter Name="return_value" DefaultValue="0" Type="Empty" Size="0" ConvertEmptyStringToNull="False" Direction="ReturnValue" />
</InsertParameters>

コード ビハインドでは、パラメーター return_value の値を取得して応答したいだけです。以下は私がやりたいことですが、明らかに間違っています。あなたが私の意図を理解できるように、私はそれを想像しながら投稿したかっただけです. ボタンのクリックを使用してみましたが、現在のコンテキストに return_value が存在しないという同じエラーが発生しただけでなく、メッセージ ボックスも投稿されません。この時点で非常に多くのことを試しましたが、私は迷っています。

更新:これは、現在コード ビハインドにあるものです。MessageBox がポップアップすると、単に「@return_value」と表示されます。

        protected void Sqldatasource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
{
    SqlParameter return_value = new SqlParameter("@return_value", SqlDbType.Int);
    return_value.Direction = ParameterDirection.ReturnValue;
    return_value.Value = (object)return_value ?? DBNull.Value;
    MessageBox.Show(return_value.Value.ToString());

    if (Convert.ToInt32(return_value.Value) != 1)
    {
        MessageBox.Show(return_value.Value.ToString());
    }
    else
    {
        MessageBox.Show(return_value.Value.ToString());

    }
}  

前もって感謝します。これが笑えるほど初歩的で申し訳ありませんが、私は盲目的に飛んでいます。

更新 2 (2013 年 5 月 7 日) : さらに検索して読んだ後、うまくいかないことをいくつか試しました。エラーはありませんが、機能しません。Inserted で次の 2 つのビットを試しました。

int? return_value = e.Command.Parameters["@return_value"].Value as int?;
    MessageBox.Show(return_value.ToString());

int return_value = (Convert.ToInt32(e.Command.Parameters["@return_value"]));
    MessageBox.Show(return_value.ToString());
4

3 に答える 3