Передача пустого значения поля в хранимую процедуру ASP .NET C # - PullRequest
5 голосов
/ 21 февраля 2011

Я хочу вернуть все строки из таблицы базы данных SQL Server 2008 в источник данных SQL, если поле textBox пустое.Поэтому я сделал хранимую процедуру с предложением if @date IS NULL.

Несмотря на то, что хранимая процедура в Visual Studio 2008 работает нормально, реальная веб-страница не показывает результатов.

Я предполагаю, что мне нужно отправить значение DBNull в сохраненный процесс, если textBox.Text == string.Empty.Я пробовал SqlDataSource1.SelectParameters.Add, но, похоже, я получаю ошибку преобразования из DBNull.Value в строку.

Это источник моих проблем или я что-то упускаю?Как бы передать DBNull.Value хранимому процессу, если текстовое поле пустое?

Ответы [ 2 ]

10 голосов
/ 21 февраля 2011

Необходимо убедиться, что для параметра 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>

Проблема начнется, если у вас будет более одного элемента управления, который может предоставить нулевое значение, и вы хотите, чтобы только один из них был нулевым. В этом случае вы должны установить для 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;
}

Это должно позволить вам решить ваши проблемы.

0 голосов
/ 21 февраля 2011

вы можете установить значение по умолчанию, равное null, в вашей хранимой процедуре, поэтому, если текстовое поле пусто, вам просто не нужно ничего передавать, для этого просто пишите = NULL после типа параметра в списке параметров хранимой процедуры.

...