0

I was looking at some old code in DotNetNuke 4.x/VB.Net and couldn't make anything meaningful out of the following code. I know SetNull method is not part of VB.Net.

What is this code trying to do when Null.SetNull(ExamTrackerId) is called?

        Private ExamTrackerId As Integer

        ' Determine ItemId
        If Not (Request.Params("ExamTrackerID") Is Nothing) Then
            ExamTrackerId = Int32.Parse(Request.Params("ExamTrackerID"))
        Else
            ExamTrackerId = Convert.ToInt32(Null.SetNull(ExamTrackerId))
        End If
4

2 回答 2

2

该类Null不是 .NET 框架的一部分,而是DotNetNuke库的一部分。我不熟悉这个库,但查看 (C#)源代码,该Null.SetNull方法似乎检查数据库中的输入参数 ( ExamTrackerId) 是否为空,如果是,则返回输入类型的值。您的代码只是将该返回值转换为一种Int32类型。

这是一个简单的实用程序类,因此您可以自己执行此检查,但由于 .NETnull类型不同,它似乎只是为了减少您意外执行不正确的 null 检查的可能性。DBNull

(我不知道源代码的链接是否已过时,或者您的代码是否不完整,但似乎没有SetNull只需要一种类型的重载object)。

于 2013-05-05T23:49:18.180 回答
0

首先,这不是 VB.Net 语言方法,而是 DotNetNuke.dll 中的自定义方法。

此外,在 DNN 7.00.04 中,没有名为 SetNull 的方法采用整数参数,但有一个类似的方法称为 SetNullInteger,它采用整数对象,如果传递给此方法的 Integer 类型具有DBNull.Value 的值。.

DNN 7.00.04 中存在的方法 SetNull 采用两个参数,而不是一个,这在 DNN 的旧版本中可能是这种情况。

因此,DNN 7.00.04 中的正确代码似乎如下。

       Private ExamTrackerId As Integer

    ' Determine ItemId
    If Not (Request.Params("ExamTrackerID") Is Nothing) Then
        ExamTrackerId = Int32.Parse(Request.Params("ExamTrackerID"))
    Else
        ExamTrackerId = Convert.ToInt32(DotNetNuke.Common.Utilities.Null.SetNullInteger(ExamTrackerId))
    End If
于 2013-05-07T14:57:06.570 回答