5

textBox フィールドが空白の場合、SQL Server 2008 データベース テーブルのすべての行を SQL データ ソースに返したいと考えています。そこで、if @date IS NULL句を使用してストアド プロシージャを作成しました。

ストアド プロシージャは Visual Studio 2008 で正常に動作しているように見えますが、実際の Web ページには結果が表示されません。

DBNullストアド プロシージャに値を送信する必要があると推測していますtextBox.Text == string.Empty。を試してみましたが、 から文字列SqlDataSource1.SelectParameters.Addへの変換エラーが発生するようDBNull.Valueです。

これが私の問題の原因ですか、それとも他に何か不足していますか? テキストフィールドが空白の場合、どのようにDBNull.Valueストアド プロシージャに渡しますか?

4

2 に答える 2

10

CancelSelectOnNullParameter が SqlDataSource で false に設定されていること、および ConvertEmptyStringToNull が必要なパラメーターで true に設定されていることを確認する必要があります。マークアップでは次のようになります。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" CancelSelectOnNullParameter="false" SelectCommand="...">
  <SelectParameters>
    <asp:ControlParameter Name="..." ControlID="..." PropertyName="..." DbType="..." ConvertEmptyStringToNull="true"/>
    ...
  </SelectParameters>
</asp:SqlDataSource>

null値を提供できるコントロールが複数あり、そのうちの1つだけをnullにすることを許可したい場合、問題が発生します。その場合、CancelSelectOnNullParameter を true に設定し、Selecting イベントを使用して DBNull.Value を追加する必要があります。

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
  if (String.IsNullOrEmpty(textBox.Text))
    ((IDbDataParameter)e.Command.Parameters["@name"]).Value = DBNull.Value;
}

これにより、問題を解決できるはずです。

于 2011-02-21T16:49:42.423 に答える
0

ストアド プロシージャでデフォルト値を null に設定できるため、テキスト ボックスが空の場合は、何も渡す必要はありません。そのためには、ストアド プロシージャのパラメータ リストのパラメータ タイプの後に = NULL を記述します。

于 2011-02-21T15:54:04.673 に答える