整数を必要とするフィールドを持つアクセス データベースがあります。Excel スプレッドシートから取得したデータを渡していますが、セルから文字列を取得すると、呼び出し関数の Try/Catch が FormatException にヒットします。私が理解しようとしているのは、無効なデータを含むセル アドレスを表示するカスタム エラー メッセージをスローすることが可能かどうか (常に可能かどうか) です。ここに私が持っているもののいくつかのサンプルコードがあります。
Public Class Main
Private cellAddress As String
Private Sub btn_Import(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImport.Click
Dim openFileDialog As New OpenFileDialog()
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
openFileDialog.Filter = "Excel Files (*.xls)|*.xlsx|All files (*.*)|*.*"
openFileDialog.RestoreDirectory = True
If openFileDialog.ShowDialog() <> Windows.Forms.DialogResult.OK Then
Return
End If
Try
ImportWorksheet(New FileInfo(openFileDialog.FileName))
Catch ex As FormatException
MessageBox.Show("The data contained within cell " & cellAddress & " is invalid.", "Error")
End Try
End Sub
Private Sub ImportWorksheet(ByVal excelFile As FileInfo)
Dim cnn As New OleDbConnection(My.Settings.cnn)
Dim cmd As OleDbCommand = GetCommand("UpdateSite")
Dim worksheet1 As ExcelWorksheet = package.Workbook.Worksheets(1)
Using package As New ExcelPackage(excelFile)
Using cmd.Connection
cmd.Connection.Open()
cmd.Parameters.Add("@MyData", OleDbType.Integer).Value = GetCellContents(worksheet1, "K8")
cmd.ExecuteNonQuery()
End Using
End Sub
Private Function GetCellContents(ByVal worksheet As ExcelWorksheet, ByVal address As String) As Object
If worksheet.Cells(address).Value Is Nothing Then
Return DBNull.Value
Else
cellAddress = address
Return worksheet.Cells(address).Value
End If
End Function
End Class
ここで何かが欠けているとは思わないでください。コードをコピーして貼り付け、変更して短くし、不要な情報をあきらめないようにしました。コードが ExecuteNonQuery() メソッドにヒットすると、エラーが発生し、書き込んだ内容が表示されます。可能であれば、セル アドレスを渡したいので、どこを見ればよいかがわかります。
これを行う唯一の方法は、クラス レベルの変数を追加し、値を取得するたびに現在のセルに設定することです。唯一の問題は、ExecuteNonQuery() でのみ起動し、複数のパラメーターがあるため、最初に追加されたパラメーターが無効であるが次のパラメーターが無効である場合、セルは毎回最後のパラメーターに設定され、間違った結果。どのパラメータが適切に変換されなかったかを具体的に教えてくれる、データベースからある種のメッセージを取得する方法はありますか?