Как я могу передать нулевой символ в методе хранимых процедур в C # 3.0? - PullRequest
0 голосов
/ 21 апреля 2009

Я пытаюсь запустить этот SP:

myDataContext.InsertEvent(codEvent, dateOfEvent, statusOfEvent);

codEvent - это int; dateOfEvent является DateTime; statusOfEvent - это символ.

Проблема в том, что Visual Studio выдает ошибку, если я передаю null statusOfEvent. И мой SP принимает обнуляемый символ, как и мой стол.

Я тоже пытался это сделать:

char? statusOfEvent= null;
      if (!String.IsNullOrEmpty(f["statusOfEvent"]))
           statusOfEvent= Convert.ToChar(f["statusOfEvent"]);

Но также выдает ошибку ...

спасибо !!

Я пытался сделать это троичное выражение:

!String.IsNullOrEmpty(f["statusOfEvent"]) ? Convert.ToChar(f["statusOfEvent"]) : DBNull.Value

Но говорится, что «неявного преобразования между char и DBNull»

И я также посмотрел на файл * .dbml designer.cs, и у моего метода SP есть такая строка:

[Parameter(DbType="Char(1)")] System.Nullable<char> statusOfEvent

Ответы [ 2 ]

8 голосов
/ 21 апреля 2009

Я считаю, что вам нужно DBNull . Значение вместо null.

Обновление
Чтобы использовать, вы должны передать его туда, где вы могли бы другой мудрый пропуск null. Итак, предполагая, что statusOfEvent обнуляем, вы можете сделать следующее.

myDataContext.InsertEvent(
    codEvent,
    dateOfEvent,
    statusOfEvent ?? DBNull.Value);

Однако, InsertEvent потребуется принять его в качестве допустимого значения для этого параметра. Если вы используете некоторую поддержку .NET, такую ​​как набор данных XSD, для описания хранимой процедуры. Вы можете изменить это, чтобы изменить параметр для принятия char? от char. Тогда вы сможете передать null, и базовая система преобразует это в DBNull.Value для вас. В этом случае вы можете оставить вызов как:

myDataContext.InsertEvent(
    codEvent,
    dateOfEvent,
    statusOfEvent);

Это также должно работать с Linq2Sql. Чтобы изменить представление хранимой процедуры в ваших объектах Linq2Sql, вам нужно открыть свой dbml и отредактировать свойства хранимой процедуры.

0 голосов
/ 21 апреля 2009

DBNull.Value - это то, что ожидает эта база данных ...

Вот как я передаю IsActive (который имеет логическое значение null) в качестве параметра ...

_ExecutedSP = new StoredProcedure("EvaluationType_GetList", base._SPInputOutput);
if (this.IsActive == null)
{
    _ExecutedSP.AddParameter("@IsActive", SqlDbType.Bit, DBNull.Value);
}
else
{
    _ExecutedSP.AddParameter("@IsActive", SqlDbType.Bit, this.IsActive);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...