asp.net 如何在Integer前添加字符

ni65a41a  于 2023-06-07  发布在  .NET
关注(0)|答案(1)|浏览(145)

我们有一个名为returnNo的字段,当从数据库查询时,它返回整数值。
返回的整数示例为4098
我们希望在整数值的开头添加字符T,然后将值递增1。将此字符附加到整数值并将其递增1的结果然后插入数据库。
当我运行下面的代码时,它只返回不带T字符的整数值,并将此值插入数据库。
我做错了什么?

Dim retNo As Integer = 0
Dim return_No As String = ""
Dim dteReturned As String = ""
Try
    Dim Sqls As String = "select MAX(returnNo) returnNo from Trials"
    Dim Sqlsr As String = "select DateReturned from Trials where ownerId='" & Session("rOwnerID") & "' "
    Dim prevretcmd As SqlCommand = New SqlCommand(Sqls)
    prevretcmd.Connection = con
    Dim rdr As SqlDataReader = prevretcmd.ExecuteReader()
    If rdr.Read() Then
    dteReturned = rdr("DateReturned").ToString()
    testReturnNo.Text = rdr("ReturnNo").ToString()
    retNo = Convert.ToInt32(testReturnNo.Text.Replace("T", "")) + 1
    returnNo.Text = "T" + retNo.ToString().PadLeft(1, "0"c)
    End If
    rdr.Close()
Catch
    retNo = 1
    returnNo.Text = retNo.ToString()
End Try
fnx2tebb

fnx2tebb1#

这里有两个100%独立的SQL查询,你混淆了获取MAX数和提取一行。
把它分解成更大的步骤。
这段代码应该可以工作:

Protected Sub Button1_Click(sender As Object, e As EventArgs)

    Dim retNo As Integer = 0
    Dim return_No As String = ""
    Dim dteReturned As String = ""

    Dim cmdSQL As New _
            SqlCommand("select MAX(returnNo) returnNo from Trials")

    Dim rstMAX As DataTable = MyRstP(cmdSQL)
    retNo = rstMAX.Rows(0)(0)

    cmdSQL.CommandText =
            "select DateReturned from Trials where ownerId=@ownerid"
    cmdSQL.Parameters.Add("@ownerid", SqlDbType.Int).Value = Session("rOwnerID")

    Dim rstTrial As DataRow = MyRstP(cmdSQL).Rows(0)
    dteReturned = rstTrial("DateReturned").ToString()
    testReturnNo.Text = retNo.ToString()
    retNo += 1
    returnNo.Text = "T" & retNo.ToString().PadLeft(6, "0")

End Sub

Public Function MyRstP(cmdSQL As SqlCommand) As DataTable

    Dim rstData As New DataTable
    Using conn As New SqlConnection(My.Settings.TEST4)
        Using (cmdSQL)
            cmdSQL.Connection = conn
            conn.Open()
            rstData.Load(cmdSQL.ExecuteReader)
        End Using
    End Using

    Return rstData

End Function

因此,我们的第一个查询从表中获取最大值。
然后我们的第二个查询根据session()中的id值获取数据库行(日期列)。
我们得到retNo,在文本框中显示它。
我们添加+ 1,然后在第二个文本框中显示,填充到6个“0”。
结果如下:

因此,在表中找到的最大值是4098,我们添加了+ 1,然后将结果与“0”的填充放在第二个文本框中。

编辑:保存的数据不是整数,而是填充字符串

好了,Max()查询将返回一个字符串,一个用字母填充的字符串,一些“0”,然后是数字。
因此,我们必须像这样修改我们的代码:

Dim rstMAX As DataTable = MyRstP(cmdSQL)
    Dim retNoText As String = ""
    retNoText = rstMAX.Rows(0)(0)
    retNo = retNoText.Substring(1) ' get all characters AFTER first letter skipped

所以,我们得到/抓取最大字符串,T000123,或K 000234或其他。
然后我们igonre第一个字母,然后加上+1
这意味着你可能有这个

A000123
  B000123

那么,在某种意义上,我们有重复的数字,因为我们的max查询将返回B 000123,去掉字母B,然后产生一个数字124。
然后我们在前面设置一个T格式。

T000124

注意100%确定这是否是你想要的,但上面的小变化将以这种方式工作。

相关问题