值停止递增为10

时间:2014-05-23 08:31:02

标签: vb.net

我有一个奇怪的问题,这个代码有效,但是当它达到10的值时它会停止递增它应该能够+1并使其成为11但它会停止。我不知道是什么导致了这一点,现在真的很困惑。

这是我的代码:

Dim i As Integer
i = Integer.Parse(TextBox1.Text) + 1
TextBox1.Text = i.toString()

可能有什么东西导致了这个吗?任何帮助或建议都会很乐意接受。提前致谢

2 个答案:

答案 0 :(得分:2)

如果该代码是other recent question的修订版,则相关代码为:

Private Sub LoadValue( )
    Dim i As Integer    
    Dim cmd As OleDbCommand = New OleDbCommand

    With cmd
        .CommandText = "SELECT MAX(Guard_ID) FROM Guard"
        .CommandType = CommandType.Text
        .Connection = Conn
        .ExecuteNonQuery()

        Dim reader As OleDbDataReader = cmd.ExecuteReader

        If reader.Read Then

           ' posted code seems to be a 
           ' revision of this:
           TextBox1.Text = reader.GetString(0)
           i = TextBox1.Text + 1
           TextBox1.Text = i

            reader.Close()
        End If
    End With
 End With

问题不在于递增,而是在TEXT列上运行MAX查询。考虑ID为{"0", "1", "2", "10", "11"}的表。该系列的MAX值是多少?由于该列是TEXT,因此完成了文本比较,答案不是" 11"但是" 2",因为字符2的值高于字符1,后者是"11""10"中的第一个数字("10"<> 10<> "ten")。

一旦有10条记录,您的MAX查询将只返回" 9"因为这是任何数字串的第一个字符的最大值。

在代码和数据库中,您希望视为数字的内容必须是数字类型。对于Date类型来说更是如此,将它们转换为字符串并没有帮助。解决方案是将数据库列类型从Text更改为Integer,也许是一个AutoNumber,让DB为您完成所有工作。

答案 1 :(得分:1)

我试过这个

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim i As Integer
    Dim itb As Integer
    'make sure the number in the tb is valid
    If Integer.TryParse(TextBox1.Text, itb) Then
        i = itb + 1
        TextBox1.Text = i.ToString()
    Else
        'not a number
        Stop
    End If
End Sub

它的效果与预期一致。