我遇到了一些我想解释的事情。我有一个函数 InitializeValues() 设置组合框,并将数据源设置为数据表。使用不带参数的公共方法 GetFileSourceData 从 DGVMain_Functions 类的实例中检索数据表。
问题是对 GetFileSourceData(MyConnectionString) 的调用实际上会编译和运行。当返回数据表并尝试设置为 cbo 的数据源时,会发生运行时错误。正常调用 GetFileSourceData() 可以正常工作。我曾向另一位开发人员询问过这个问题,他认为我有一些过时的参考,所以我清理了项目,然后删除了调试文件夹中的所有内容,然后重新构建,但它仍然具有相同的行为。
我的问题是,为什么编译器会接受这个而不抛出语法错误,而且为什么它甚至到了你可以实际进入这个不应该存在的函数的地步,并让它在返回时失败?
编辑: 将 Option Strict On,确实使编译器捕捉到这一点。“Option Strict On 不允许从 'String' 到 'Integer' 的隐式转换。但这仍然不是我想看到的错误。我想知道为什么它不显示“没有这样的重载/定义该功能存在”。
错误是这样的:
创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:错误:错误:从字符串“用户 ID = XXXX;数据源 = XXXX”到类型“整数”的转换无效。Microsoft.VisualBasicFileProcessor。"InnerException = {"输入字符串的格式不正确。"}"
Private Sub InitializeValues()
cboFileSource.DisplayMember = "filesource"
cboFileSource.ValueMember = "filesource"
'first call works fine since it matches
cboFileSource.DataSource = DgvMain_functs.GetFileSourceData()
'below is the call that gets through the complier and actually runs, fails on return
cboFileSource.DataSource = DgvMain_functs.GetFileSourceData(MyConnectionString)
End Sub
Public Function GetFileSourceData() As DataTable
Try
Dim dt As DataTable
Dim strSQL As String = "select distinct filesource from FileUpload_FolderPath"
dt = SqlHelper.ExecuteDataset(MyConnectionString, CommandType.Text, strSQL).Tables(0)
Return dt
Catch ex As Exception
Throw New Exception("Error in DGVMain_Functions: " & ex.Message & ex.Source)
End Try
End Function