我调用一个函数(SaveChanges)来访问我的业务/数据层,并将所有更改保存到标记为Add或Update并标记为要处理的字段。此功能用于在60多分钟前完成工作。
发生的事情是突然该函数返回false。在通过代码调试之后,当它命中Return时,本地布尔值设置为True ...但是当它返回到调用方法(并使用返回值)时,它现在是False。
正如我所说,我逐行检查并调试了它,然后我添加了一块手表。有趣的是,有一个位置将布尔值设置为false,当我在该位置放置断点时,它永远不会到达。
这是功能:
Private Function SaveChanges() As Boolean
Dim blnSaved As Boolean = True
Dim saveableRows As List(Of DataRow) = (From d As DataRow In _listData.Tables(0).Rows _
Where Not d("Marking") = "Duplicate" _
And d("Process") = True _
Select d).ToList()
If saveableRows.Count > 0 Then
For Each drRow As DataRow In saveableRows
Dim data As IDataEntity = DataEntities.GetData(_tableName)
If drRow("Marking") = "Update" Then
'UPDATE
data.UpdateItem(drRow.ItemArray)
Else
'ADD
data.AddItem(drRow.ItemArray)
End If
If data.HasErrors Then
blnSaved = False 'Never reaches this part ... !?!?!
End If
Next
Else
blnSaved = True
End If
End Function
以下是我使用该功能的方法:
If SaveChanges() Then
Dim frmTableView As frmTableView = New frmTableView(_listData.Tables(0).TableName)
If Not Me.MdiParent Is Nothing Then
frmTableView.MdiParent = Me.MdiParent
End If
frmTableView.Show()
Me.Close()
Else
MessageBox.Show("Unable to save the list. IT has been notified.", "Save Failed", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
我花了太多时间在这上面,并认为是时候寻求帮助了。
由于
答案 0 :(得分:6)
你永远不会返回你的布尔值。添加:
Return blnSaved
在函数的底部。
答案 1 :(得分:1)
您永远不会分配函数返回值。您将获得其默认值False。而不是分配给局部变量(blnSaved),而是分配给SaveChanges。或者在函数末尾添加Return blnSaved。
答案 2 :(得分:1)
你不是在功能结束时错过Return blnSaved
吗?
答案 3 :(得分:1)
我同意您只是缺少Return blnSaved语句。我还建议您不需要以下else语句,因为您已经在方法的开头初始化了blnSaved值。
Else
blnSaved = True
End If