ASP.Net VB Хранимая процедура допускает нулевой параметр - как передать целое число, равное NULL, в хранимую процедуру - PullRequest
0 голосов
/ 02 апреля 2012

Значение (параметр) ABC может быть NULL.Я борюсь с тем, как установить его на ноль.Заявление ниже не работает.Если я пытаюсь установить тип Nullable (OfInteger), я получаю ошибку, что значение является «неправильным типом».Заранее спасибо.

 Dim ABC as Integer = Nothing

 Public Function RunStoredProce(ByVal **ABC** As Integer, ByVal DEF As String) _
               As IEnumerable(Of MyProjectStoredProcResults) Implements MyFunction.GetThatDataResult

        Dim y = (From p In dc.uspReportMyFunction(**ABC**, DEF)
            Select p).ToList

        Return y

    End Function

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

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

Обратите внимание, как ABC передается как Nullable тип:

Public Function RunStoredProce(ByVal ABC As Integer?, ByVal DEF As String) As IEnumerable(Of MyProjectStoredProcResults) Implements MyFunction.GetThatDataResult
    Return (From p In dc.uspReportMyFunction(ABC, DEF) Select p).ToList
End Function

Я не знаю, как настроена ваша система, но предполагая, что uspReportMyFunction - это функция, которая вызывает хранимую процедуру, вы бы хотели исключить ABC, когда она равна нулю:

If ABC.HasValue Then
    'Add ABC as a parameter
End If

'Add DEF as a parameter

'Execute the stored procedure

EDIT

Допустим, это функция данных, которая выполняет хранимую процедуру

public void SaveSomething(int jobID, int? postNumber)
{
    using (var data = new DataAccess(this.ConnectionString))
    {
        data.ProcedureName = "SaveSomething";

        data.AddParm("@JobID", SqlDbType.Int, JobID);
        if (postNumber.HasValue)
            data.AddParm("@PostNumber", SqlDbType.Int, PostNumber.GetValueOrDefault());

        return data.ExecNonQuery();
    }
}

Из внешнего интерфейса вы можете вызвать эту функцию следующим образом:

int jobID = 1;
int? postNumber = null;

GetWorkOrderDetailAdjustment(jobID, postNumber); //postNumber == null
0 голосов
/ 02 апреля 2012
Dim ABC As Nullable(Of Integer)

Public Function RunStoredProce(ByVal ABC As Nullable(Of Integer), ByVal DEF As String) _
           As IEnumerable(Of MyProjectStoredProcResults) Implements MyFunction.GetThatDataResult

    Dim y = (From p In dc.uspReportMyFunction(ABC, DEF)
        Select p).ToList

    Return y

End Function

Я полагаю, что linqtosql автоматически обработает перевод на Nullable.

...