1

我的程序有问题,我需要INCREMENT某个值Label

 Dim p1num As Integer = 0
 M.Text = Format(Now, "MM")
 Y.Text = Format(Now, "yy")

txtPNumber.Text = Y.Text.ToString & M.Text.ToString & p1num.ToString("D4")

我使用它来生成患者 ID,其中 M 代表月份,Y 代表年份 + p1num 以创建一个 4 位数字......所以输出将是这样的:

(让我们使用当前日期和年份)

13020001
13020002
13020003
13020004

等等....

在此之后,我将使用这些代码将其插入到 SQL SERVER 中的数据库中:

Dim SQLcon As New SqlConnection
        Dim SQLdr As SqlDataReader
        Try
            SQLcon.ConnectionString = "Data Source=####;" & _
"Initial Catalog=####;Persist Security Info=True;User ID=####;Password="
            Dim SQLcmd As New SqlCommand("INSERT INTO dbo.Patients" & _
                                         "(pIDNo)" & _
                                         "VALUES(@pIDNo)", SQLcon)
            SQLcmd.Parameters.AddWithValue("@pIDNo", txtPNumber.Text)
 MsgBox("Patient Added!", MsgBoxStyle.Information)
            SQLdr = SQLcmd.ExecuteReader()
        Catch ex As Exception
            MessageBox.Show("Error Occured, Can't Add Patient!" & ex.Message)
        Finally
            SQLcon.Close()
        End Try
        Return ""

现在的问题是,当我关闭程序时,生成的值TextBox总是从 13020001 开始。我想保留最近添加的值,然后将其增加到 +1,所以我计划显示刚刚添加到的当前 ID我的数据库使用这些:

  Dim querystring As String = "SELECT MAX(pIDNo) FROM dbo.Patients"

            Using connection As New SqlConnection("Data Source=####;" & _
    "Initial Catalog=####;Persist Security Info=True;User ID=####;Password=")
                Dim command As New SqlCommand(querystring, connection)
                connection.Open()
                Dim reader As SqlDataReader = command.ExecuteReader
                While reader.Read
                    txtCurrentID.Text = reader.GetString(0)
                End While
                reader.Close()

我设法显示当前 ID,但现在的问题是我不能将其增加 1。

其他问题:我尝试复制显示的值并将其添加一个,但出现了另一个问题,月份和年份没有改变。如果我达到“三月”月,则生成的值仍然是

1302 + pnum1.text("D4") 应该是 1303 + pnum1.text("D4")

1302 代表 2 月 1303 代表 3 月

谁能解决我的问题?

4

4 回答 4

1

13020004 这是最后插入的值。之后你能告诉我们你的要求值是多少吗?

于 2013-02-13T07:07:24.173 回答
1

取回价值MAX(pIDNo)String

Dim value  = string.Empty
While reader.Read
    value = reader.GetString(0)
End While

之后,您可以value根据需要进行解析:

dim year = value.Substring(0,2)
dim month = value.Substring(2,2)
dim patientId = value.Substring(4,4)
dim newPatientId as Integer = Integer.Parse(patientId) + 1
.......

编辑 此代码为您提供了您想要的内容:

txtCurrentID.Text = Today.Year.ToString().Substring(2,2) & Today.Month.ToString().PadLeft(2, "0") & (Integer.Parse(value) + 1).ToString("D4")
于 2013-02-13T07:13:47.770 回答
1
 While reader.Read       //you don't need that for aggregate functions. 
     txtCurrentID.Text = command.ExecuteScaler() //something like that... is enough 
     int p1num=integer.parse(txt.CurrentID.text.substring(4,4)) +1
 //  End While
 ...

txtPNumber.Text = Y.Text.ToString & M.Text.ToString & p1num.ToString("D4")

如果你只想要日期:然后使用Date.Today

       pNumber.Text = Today.Date.Month.ToString + " " + Today.Date.Year.ToString

IntelliSense 是您的第一本书,因此必须使用它。;)

于 2013-02-13T07:21:29.580 回答
1

从数据库中检索患者 ID 并将其吐出,分配给另一个变量。此方法有效

dim p1num = patientId.Substring(4,7)
Dim M = Format(Now, "MM")
Dim Y = Format(Now, "yy") 
lblsample.Text = Y.ToString() & M.ToString() & p1num.ToString("D4")
于 2013-02-13T07:28:19.817 回答