私はこれについて何日も検索しましたが、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());