我有一個名為 GetTransNo() 的函式,但是當我運行代碼時,我收到此錯誤變數 'GetTransNo' 在被分配值之前使用。運行時可能會導致空參考例外”請任何人都可以幫助我
Function GetTransNo() As String
Try
Dim sdate As String = Now.ToString("yyyyMMdd")
cn.Open()
cm = New SqlCommand("Select * From TblCart Where TransNo Like '" & sdate & "%' Order By Id Desc", cn)
dr = cm.ExecuteReader
dr.Read()
If dr.HasRows Then
GetTransNo = CLng(dr.Item("Transno").ToString) 1
Else
GetTransNo = sdate & "0001"
End If
dr.Close()
cn.Close()
Catch ex As Exception
cn.Close()
MsgBox(ex.Message, vbCritical)
End Try
Return GetTransNo
End Function
在這里我呼叫函式
Private Sub BtnNewOrder_Click(sender As Object, e As EventArgs) Handles BtnNewOrder.Click
If CheckTransaction() = True Then
LblTransNo.Text = GetTransNo()
With FrmSelectTable
.LoadTable()
.ShowDialog()
End With
loadcart()
Else
MsgBox("Transaction is already closed", vbExclamation)
End If
End Sub
uj5u.com熱心網友回復:
在過去,通過撰寫從函式回傳一個值functionName = theReturnValue,如問題中的代碼所示GetTransNo = sdate & "0001"。
回傳值的現代方法是使用Return陳述句,如以下代碼所示:
Function GetTransNo() As String
Dim sql = "SELECT TOP (1) TransNo FROM TblCart
WHERE TransNo LIKE @TransNo
ORDER BY Id DESC"
Dim sdate As String = Now.ToString("yyyyMMdd")
Dim transNo As String = ""
Using conn As New SqlConnection("yourConnectionStingGoesHere"),
sqlCmd As New SqlCommand(sql, conn)
sqlCmd.Parameters.Add(New SqlParameter With {.ParameterName = "@TransNo",
.SqlDbType = SqlDbType.VarChar,
.Value = sdate & "%"})
Try
conn.Open()
Dim rslt = sqlCmd.ExecuteScalar()
If rslt Is Nothing Then
transNo = sdate & "0001"
Else
transNo = (CLng(rslt) 1).ToString()
End If
Catch ex As Exception
MsgBox(ex.Message, vbCritical)
End Try
End Using
Return transNo
End Function
編譯器被Return函式名混淆了。
另外,我使用了一個引數來傳遞值——你應該總是使用引數,因為這是一個好習慣,可以防止很多潛在的問題。
您不能cn多次嘗試重用資料庫連接(在問題的代碼中),因為這也會導致混淆。使資料庫每次都能高效地創建新連接。
uj5u.com熱心網友回復:
這是因為您的函式有一種方法,其中“GetTransNo”沒有任何價值:當它立即離開 try catch 時。有2個解決方案:
為 GetTransNo 定義一個默認值:
Function GetTransNo() As String
GetTransNo = ""
Try
[...]
End Try
Return GetTransNo
End Function
當資料庫讀取失敗時,在 catch 中定義一個值:
Function GetTransNo() As String
Try
[...]
Catch ex As Exception
cn.Close()
MsgBox(ex.Message, vbCritical)
GetTransNo = ""
End Try
Return GetTransNo
End Function
當您呼叫該函式時,您可以檢查它是否回傳“”(= 發生錯誤),但在您的情況下,它不是很有用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/320893.html
標籤:网络
上一篇:檢索保存在資料表中的串列
