String.Format 的整数在 VB.Net 中不正确

String.Format for Integer is Incorrect in VB.Net

这不应该发生,所以我一定是漏掉了一些简单的东西。

在下面的 VB 函数中,我尝试使用以下格式语句生成要在屏幕上显示的部件号列表:

ticket = String.Format("{0:000}-{1:00000}-{2:00}", storeNumber, order, release)

因此,ticket 的格式应为 xxx-yyyyy-zz,以便票证是人类可读的,并且我的应用程序的其他部分可以解析此数据。

Public Shared Function GetShipTickets(storeNumber As Integer, auditor As String, startDate As DateTime) As ShipTickets
    Dim list As New ShipTickets(auditor)
    list.Display = String.Format("Since {0:MMMM d}.", startDate)
    Const sqlCmd As String =
        "SELECT TICKET_STORE, TICKET_ORDER, TICKET_RELEASE " &
        "FROM TBLRELHDR " &
        "WHERE TICKET_STORE=@TICKET_STORE AND STATUS='C' AND @CREATE_DATE<=CREATE_DATE " &
        "ORDER BY TICKET_ORDER, TICKET_RELEASE, CREATE_DATE; "
    Dim table As New DataTable()
    Using cmd As New DB2Command(sqlCmd, Db2CusDta)
        cmd.Parameters.Add("TICKET_STORE", DB2Type.SmallInt).Value = storeNumber
        cmd.Parameters.Add("CREATE_DATE", DB2Type.Char, 8).Value = String.Format("{0:yyyyMMdd}", startDate)
        table.Load(cmd.ExecuteReader())
    End Using
    If 0 < table.Rows.Count Then
        For Each row As DataRow In table.Rows
            Dim order As String = String.Format("{0}", row("TICKET_ORDER")).Trim().ToUpper()
            Dim release As String = String.Format("{0}", row("TICKET_RELEASE")).Trim().ToUpper()
            Dim ticket As String = String.Format("{0:000}-{1:00000}-{2:00}", storeNumber, order, release)
            list.Add(ticket)
        Next
    End If
    list.Sort()
    Return list
End Function

虽然它不起作用。

此外,当我在屏幕上查看我的数据时,它也无法正确显示:

这是怎么回事?

VB 不是我最强的编程语言。 VB 有一些我不知道的细微差别,或者编译器搞砸了。

使用 Visual Studio 2012

格式“{2:00}”适用于整数,不适用于字符串。它不会自动将由数字组成的字符串转换为整数。手动将字符串转换为整数:

Dim ticket As String = String.Format("{0:000}-{1:00000}-{2:00}", 
                                     CInt(storeNumber), 
                                     CInt(order), 
                                     CInt(release))