对象引用未设置为对象的实例 - 仅在一台计算机上

时间:2015-05-06 23:47:42

标签: sql database vb.net string type-conversion

我搜索了类似的问题,但他们似乎都没有帮助解决这个问题。我使用Visual Basic .NET并通过SQL连接。我收到上面的错误,但只有当我通过可执行文件运行项目时。在调试模式下,我没有收到错误。

我已将其缩小到错误:

  

System.NullReferenceException:未将对象引用设置为对象的实例。      在APP_XIFIN.NET_3._5.WebServices.Execute()

然后:

  

System.InvalidCastException:从字符串转换" JAV"输入' Double'无效。 ---> System.FormatException:输入字符串的格式不正确。      在Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value,NumberFormatInfo NumberFormat)      在Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value,NumberFormatInfo NumberFormat)      ---内部异常堆栈跟踪结束---      在Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value,NumberFormatInfo NumberFormat)      在Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value)      at APP_XIFIN.NET_3._5.XIFIN_Global.EndTransmission(String AccessionID,String Sequence,String StatusCode,String StatusMessage,String RefDate)

最让我困惑的是,数据库和代码中的任何内容都与Double无关。

以下是代码:

Public Function EndTransmission(ByVal AccessionID As String, ByVal Sequence As String, ByVal StatusCode As String, ByVal StatusMessage As String, Optional ByVal RefDate As String = "NO") As Date

UPDATE TransmissionQueue SET StatusCode = @StatusCode, StatusMessage = @StatusMessage, InterfaceTime = GETDATE(), ReferencesBuiltTime = GETDATE() WHERE AccessionID = @Accession AND Sequence = @Sequence"

    Try
        Using connection As New SqlConnection(connectionstring)
            connection.Open()
            Using Command As New SqlCommand(sql, connection)

                'set parameters
                Command.Parameters.Add("@StatusCode")
                Command.Parameters("@StatusCode").Value = StatusCode

                Command.Parameters.Add("@StatusMessage")
                Command.Parameters("@StatusMessage").Value = StatusMessage

                Command.Parameters.Add("@Accession")
                Command.Parameters("@Accession").Value = AccessionID

                Command.Parameters.Add("@Sequence")
                Command.Parameters("@Sequence").Value = Sequence

                'execute
                Command.ExecuteScalar()
            End Using
            connection.Close()
        End Using
   End Using

    Catch ex As Exception
        'A connection level error has occurred
        'Expand exception handling as needed
        'MsgBox(ex.ToString) 'Convert this to Windows Event Log
        Call SendEmail(ex.ToString, "Accession: " & AccessionID & vbNewLine & "Sequence: " & Sequence & vbNewLine & "StatusCode: " & StatusCode & vbNewLine & "RefDate: " & RefDate)
    End Try

我也试过这段代码:

sql = "UPDATE TransmissionQueue SET StatusCode = '" + StatusCode + "', StatusMessage = '" + cSQL(StatusMessage) + "', InterfaceTime = GETDATE(), ReferencesBuiltTime = GETDATE() WHERE AccessionID = '" + AccessionID + "' AND Sequence = '" + Sequence + "'"

    Try
        Using connection As New SqlConnection(connectionstring)
            connection.Open()
            Using Command As New SqlCommand(sql, connection)

                'execute
                Command.ExecuteScalar()
            End Using
            connection.Close()
        End Using
End Using

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

不幸的是,修复不是因为我的问题。我和我正在传输数据的公司打开了一张票,它解决了这个问题。

基本上,姓氏和名字存储在另一个用于传输数据的表的单个字段中。他们的系统不支持名字或姓氏的NULL值。结果,我构建了一个SSIS作业,如果它有一个逗号,则会分割姓氏,并使用名字和姓氏更新表。

该公司仍然在调查问题,但我的目标已经解决了。

问题解决了!