【问题标题】:How can i add auto increment in vb.net with date, year and alphabets如何在 vb.net 中添加带有日期、年份和字母的自动增量
【发布时间】:2016-02-05 09:08:05
【问题描述】:

代码是这样的。但是我没有得到新号码,而是得到了 Feb-16-INV-00011 和 Feb-16-INV-000111 和 Feb-16-INV-0001111

Private Function newautonum()

    Dim NewValue As Integer
    'Dim result As String
    Dim resultN As String

    Dim ynow As String = DateTime.Today.ToString("yy")
    Dim Mnow As String = DateTime.Today.ToString("MMM")
    Dim Bilnow As String = Mnow & "-" & ynow & "-"

    Dim qry As String = "select MAX(ID) from tblTrns"

    ConObj = New SqlConnection(ConStr)
    ConObj.Open()

    CmdObj = New SqlCommand(qry, ConObj)
    resultN = CmdObj.ExecuteScalar().ToString()

    If String.IsNullOrEmpty(resultN) Then
        resultN = Bilnow & "INV-000"
        ' resultN = result
    End If

    resultN = resultN.Substring(0)
    Int32.TryParse(resultN, NewValue)
    NewValue = NewValue + 1
    resultN = resultN + NewValue.ToString
    Return resultN

    ConObj.Close()
End Function

现在我试过了,但没有运气.... 从类型“DBNull”到类型“String”的转换无效。 getnextvalue函数错误。

Private Function newautonum() As String

    Dim NewValue As Integer
    Dim result As String
    Dim qry As String = "Select MAX(ID) from tblTrns"

    ConObj = New SqlConnection(ConStr)
    ConObj.Open()

    CmdObj = New SqlCommand(qry, ConObj)
    result = CmdObj.ExecuteScalar().ToString()

    If String.IsNullOrEmpty(result) Then
        result = String.Format("{0}-INV-{1:000}", DateTime.Now.ToString("MMM-yy"), NewValue)
    End If

    Int32.TryParse(result, NewValue)
    NewValue = GetNextValue()
    result = result & GetNextValue.ToString
    Return result

    ConObj.Close()
End Function

【问题讨论】:

  • 你应该打开Option Strict
  • 也试过了。但是字符 $ 无效?
  • 使用 resultN = retval = String.Format("{0}-INV-{1}", DateTime.Now.ToString("MMM-yy"), newvalue.ToString("000")) 发布的答案是使用 VS2015 功能
  • 我正在使用 VS2010。它会在 2010 年生效吗?
  • 尊敬的先生,请您完成我的完整回答

标签: .net vb.net


【解决方案1】:

那里有你需要的一切,只是你没有的字符串的格式。

假设NewValue 包含您要为其创建字符串的下一个数字:

 Dim newValue = GetNextValue()
 resultN = $"{DateTime.Now.ToString("MMM-yy")}-INV-{newValue:000}"

注意,如果您使用的是 Visual Studio 2013 或更低版本,则必须使用 String.Format 而不是 $ 快捷方式:

resultN = String.Format("{0}-INV-{1:000}", DateTime.Now.ToString("MMM-yy"), newValue)

我建议你有一个单独的函数来返回下一个值:

Private Function GetNextValue() As Integer
    Dim qry As String = "select MAX(ID) from tblTrns"

    ConObj = New SqlConnection(ConStr)
    ConObj.Open()

    CmdObj = New SqlCommand(qry, ConObj)
    Dim result = CmdObj.ExecuteScalar()

    If String.IsNullOrEmpty(result) Then
        Return 1
    Else
        Return CInt(result) + 1
    End If
End Function

【讨论】:

  • 谢谢先生。但我不明白这一行。结果N = $"{DateTime.Now.ToString("MMM-yy")}-INV-{newValue:000}"
  • 我也试过这个。但是字符 $ 无效?
猜你喜欢
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多