説明したいことがあります。コンボボックスを設定し、データソースをデータテーブルに設定する関数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