Vb.net:调用与原型不匹配的函数通过编译器检查

时间:2013-03-21 16:43:14

标签: vb.net function compiler-construction syntax-error

我遇到了一些我想解释的问题。我有一个函数InitializeValues(),它设置一个组合框,并将数据源设置为一个数据表。使用公共方法GetFileSourceData从类DGVMain_Functions的实例中检索数据表,该方法不带参数。
  问题是对GetFileSourceData(MyConnectionString)的调用实际上将编译并运行。返回数据表并尝试设置为cbo的数据源时,会发生运行时错误。正常调用GetFileSourceData()正常工作。   我曾向其他开发人员询问过这个问题,他认为我有一些陈旧的参考,所以我清理了项目,然后删除了我的调试文件夹中的所有内容,并重建了,但它仍然有相同的行为。

我的问题是,为什么编译器会接受这个并且不会抛出语法错误,而且为什么它甚至可以实际进入这个不应该存在的函数,并让它在返回时失败?

编辑:使用Option Strict On,确实让编译器捕获了这个。 “Option Strict On禁止从'String'到'Integer'的隐式转换。但这仍然不是我想看到的错误。我想知道为什么它没有显示”没有这样的重载/定义该功能存在“。

错误是这样的:

  

创建表单时出错。有关详细信息,请参阅Exception.InnerException。错误是:错误:错误:从字符串“user id = XXXX; data source = XXXXX”到“Integer”类型的转换无效.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

1 个答案:

答案 0 :(得分:0)

正如您在评论中暗示的那样,Option Explicit On肯定会解决此问题。