【问题标题】:Convert from String to integer without truncating zeroes at the left side从字符串转换为整数而不在左侧截断零
【发布时间】:2017-08-03 09:06:34
【问题描述】:

我有三个字符串。 1.str1="450" 2.str2="SKDR" 3.str3="008001"。我想加入这三个字符串。每次str3值都应该加1。如果我们把它当作整数,那么初始的零将被截断。

      Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click


    Dim d1 As String = ""
    Dim s As String = ""
    Dim dtqry1 As Integer = 0
    Dim br As String = dgvCanaraBankCAU.CurrentRow.Cells(2).Value.ToString
    Dim pro As String = dgvCanaraBankCAU.CurrentRow.Cells(3).Value.ToString
    Dim dtqry As DataTable = mainModule.DatabaseTableQuery("SELECT DPNO,StartNumber from Master_CINumber where Branch='" + br + "' and ProjectOffice='" + pro + "'")
    If dtqry.Rows.Count > 0 Then
        For Each dr As DataRow In dtqry.Rows
            d1 = dr(0).ToString
            s = dr(1).ToString
        Next
        Dim chk As DataTable = mainModule.DatabaseTableQuery("Select * from CBEntry where BankBranch='" + br + "' and ProjectOffice='" + pro + "'")
        If chk.Rows.Count = 0 Then
            dtqry1 = Val(s)
        Else
            dtqry1 = mainModule.DatabaseScalarQuery("SELECT max(startNumber) from CBEntry where BankBranch='" + br + "' and ProjectOffice='" + pro + "'")
            dtqry1 = dtqry1 + 1
        End If
    End If
End Sub

【问题讨论】:

  • 一个 int 不会有前导零。您必须使用 varchar 并填充它。例如 RIGHT('00000000' + Convert(VARCHAR(8), myInt), 8)
  • 您的代码易受 SQL 注入攻击。 从不 使用字符串连接来构建 SQL 语句。始终使用参数。

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


【解决方案1】:

使用传递给In32.ToString 的自定义格式字符串来包含前导零。

例如。

Dim x = 42
Console.WriteLine(x.ToString("000000"))

会输出

000042

【讨论】: