Как передать нулевое значение SqlDataSource, использующему хранимую процедуру?

Использование .NET 4 и C#. Все это выдает ошибку:

sdsTypeinfo.SelectParameters.Add("@TypeCode", DbType.Boolean, DBNull.Value);

sdsTypeinfo.SelectParameters.Add("@TypeCode", DBNull.Value);

sdsTypeinfo.SelectParameters.Add("@TypeCode", null);

sdsTypeinfo.SelectParameters.Add("@TypeCode", "");

Ошибка указывает на то, что процедура вообще не получает никакого значения.

Procedure or function 'Typeinfo' expects parameter '@TypeCode', which was not supplied.

Ответить

Вам не нужен @ в имени параметра. Это отличается от добавления параметров при вызове хранимой процедуры с помощью SqlCommand, и в этом случае вам нужно что-то вроде этого:

cmd.Parameters.AddWithValue("@TypeCode", DBNull.Value);

Кроме того, DBNull.value является допустимым параметром в приведенном выше примере, но принятое значение NULL при добавлении SelectParameters в SqlDataSource просто равно null.


person mmcglynn    schedule 04.11.2011    source источник
comment
Какую ошибку выдает? На стороне сервера Sql или на стороне клиента? Какое именно сообщение об ошибке?   -  person Icarus    schedule 04.11.2011
comment
Это опечатка? Ошибка предполагает, что параметр будет называться @pTypeCode, а вы передаете @TypeCode...   -  person Bob Vale    schedule 04.11.2011


Ответы (3)


Должна быть опция при добавлении параметра для преобразования пустой строки в нуль.

<SelectParameters>
    <asp:ControlParameter ControlID="lstCategories" Name="ProductSubcategoryID" ConvertEmptyStringToNull="true" PropertyName="SelectedValue" />
</SelectParameters>

Поскольку вы используете хранимую процедуру, вам нужно сделать параметр необязательным:

@SomeParm INT = NULL
person James Johnson    schedule 04.11.2011

можно попробовать так...

    string x = null;
command.Parameters.AddParameter(
     new SqlParameter("@column", (object)x ?? DBNull.Value);

даст вам параметр со значением DBNull.Value, но

string x = "A String";
command.Parameters.AddParameter(
     new SqlParameter("@column", (object)x ?? DBNull.Value);
person rockyashkumar    schedule 04.11.2011

В вашей хранимой процедуре установите для параметра значение, например

@TypeCode = '' 

или если это int

@typecode = 1

и т. д., вы поняли.

person Community    schedule 04.11.2011
comment
У меня нет контроля над хранимой процедурой. - person mmcglynn; 04.11.2011