ASP.Net VB存储过程允许空参数 - 如何将NULL为空的整数传递到存储过程

问题描述:

ABC的值(参数)可以为NULL。我正在努力如何将其设置为null。下面的声明不起作用。如果我尝试设置Nullable(OfInteger)类型,则会出现错误,该值是'错误的类型'。提前致谢。ASP.Net VB存储过程允许空参数 - 如何将NULL为空的整数传递到存储过程

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 
+0

是参数在存储过程中声明可选(即'paramName = NULL')?在这种情况下,将参数更改为'ByVal abc as Nullable(Of Integer)'应该可以工作 – mshsayem 2012-04-02 15:42:11

+0

为什么要调用.ToList? – 2012-04-02 15:52:13

+0

因为如果ABC的值是NULL,它将返回ABC的所有值,否则它将返回存储在ABC中的值。这是在视图中处理。 – Susan 2012-04-02 17:44:52

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会自动处理可空转换。

+0

当我运行函数时出现以下错误:“可为空的对象必须有一个值。” – Susan 2012-04-02 17:42:31

+0

谢谢你的帮助! – Susan 2012-04-03 16:30:56

您可以整数空的,只有通过它,如果它有一个值:

通知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 

编辑

让我们说这是执行存储过程

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

当我运行该函数时出现以下错误:“可空对象必须有一个值。” – Susan 2012-04-02 17:36:52

+0

我是否应该在语句中留下'ABC':Dim y =(From p In dc.uspReportMyFunction(ABC,DEF)Select p).ToList ...... ???? – Susan 2012-04-02 17:38:09

+0

我会把它留在那里,并且使它成为如此'dc.uspReportMyFunction'如果过程调用为空则从过程调用中排除'ABC'。 – 2012-04-02 17:44:36