0

フォームの読み込み時にテキストボックスに自動インクリメントの英数字 ID を生成しようとしていますが、以下のコードを使用して、ID "ABC1" の最初のデータセットを空のテーブルに挿入できますが、次の読み込み時に、システムは文字列 "ABC1" から double 型への変換が無効であるというエラーをスローします。

コードについて何か助けてもらえますか。

ありがとう。

Try

    Dim con As New SqlClient.SqlConnection()
        con.Open()
        Dim myCommand As SqlCommand
        Dim pdid As String
        myCommand = New SqlCommand("select ISNULL(Max(ID),0) From SQLTable", con)
        Dim reader As SqlDataReader = myCommand.ExecuteReader
        reader.Read()
        id= reader.Item(0) + 1
        pdidbox.Text = "ABC" + pdid.ToString()
        reader.Close()
    Catch ex As Exception
        System.Windows.Forms.MessageBox.Show(ex.Message)
    End Try
4

2 に答える 2

0

これを試して

    Public Function IncrementString(ByVal Sender As String) As String
    Dim Index As Integer
    For Item As Integer = Sender.Length - 1 To 0 Step -1
        Select Case Sender.Substring(Item, 1)
            Case "000" To "999"
            Case Else
                Index = Item
                Exit For
        End Select
    Next
    If Index = Sender.Length - 1 Then
        Return Sender & "1" '  Optionally throw an exception ?
    Else
        Dim x As Integer = Index + 1
        Dim value As Integer = Integer.Parse(Sender.Substring(x)) + 1
        Return Sender.Substring(0, x) & value.ToString()
    End If
End Function

次に、次のように呼び出します。

Dim comm As New SqlCommand
 comm.CommandText = "SELECT MAX(UserID) FROM SQLTable"
于 2013-02-23T07:59:36.487 に答える
0

このコードを使用すると、MAX 関数を使用してデータベースから正しく取得できる書式設定された文字列を取得できます。

Dim curValue as Integer
Dim result as String
using con as SqlConnection = new SqlConnection("server=localhost;initial catalog=TEMPDB;Trusted_Connection=True;")
    con.Open()
    Dim cmd  = new SqlCommand("Select MAX(ID) FROM TEST", con)
    result = cmd.ExecuteScalar().ToString()
    if string.IsNullOrEmpty(result) Then
        result = "ABC000"
    End If

    result = result.Substring(3)
    Int32.TryParse(result, curValue)
    curValue = curValue  + 1
    result = "ABC" + curValue.ToString("D3")

End Using

このコードは、「ABC001」、「ABC002」などの形式の文字列を ID 列に格納します。MAX 関数を文字列値に使用しようとする場合、格納された数値の前にゼロを含める必要があります。そうしないと、4 番目の文字が比較されるため、文字列 ABC2 が ABC19 より大きくなります。もちろん、上記のようにデータテーブルをクエリして単一の結果を検索する場合は、データリーダーを使用するよりも ExecuteScalar を使用する方が簡単です。

于 2013-02-23T08:15:19.097 に答える