2

説明したいことがあります。コンボボックスを設定し、データソースをデータテーブルに設定する関数InitializeValues()があります。データテーブルは、パラメータをとらないパブリックメソッドGetFileSourceDataを使用して、クラスDGVMain_Functionsのインスタンスから取得されます。
問題は、GetFileSourceData(MyConnectionString)の呼び出しが実際にコンパイルされて実行されることです。データテーブルが返され、cboのデータソースに設定しようとすると、実行時エラーが発生します。通常のGetFileSourceData()の呼び出しは正しく機能します。別の開発者にこれについて尋ねたところ、彼は私が古い参照を持っていると思ったので、プロジェクトをクリーンアップし、デバッグフォルダー内のすべてを削除して再構築しましたが、それでも同じ動作でした。

私の質問はこれです、なぜコンパイラはこれを受け入れて構文エラーをスローしないのですか?さらに、存在してはならないこの関数に実際にステップインして、戻ったときに失敗するようになるのはなぜですか?

編集:Option Strictをオンにすると、コンパイラはこれをキャッチします。「OptionStrictOnは、「文字列」から「整数」への暗黙の変換を許可しません。しかし、それでも私が見たいエラーではありません。「そのような過負荷/定義はありません。その機能が存在します」。

エラーは次のとおりです。

フォームの作成中にエラーが発生しました。詳細については、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
4

1 に答える 1

0

コメントでほのめかしたように、確かにOptionExplicitOnはこの問題を解決します。

于 2013-03-21T17:07:38.860 に答える