0

整数を必要とするフィールドを持つアクセス データベースがあります。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() でのみ起動し、複数のパラメーターがあるため、最初に追加されたパラメーターが無効であるが次のパラメーターが無効である場合、セルは毎回最後のパラメーターに設定され、間違った結果。どのパラメータが適切に変換されなかったかを具体的に教えてくれる、データベースからある種のメッセージを取得する方法はありますか?

4

1 に答える 1

0

気にしないでください、私は今のところこれで行きました...うまくいきますが、もし皆さんが私にもっと良いものをくれるなら、してください.

cmd.Parameters.Add("@MyData", OleDbType.Integer).Value = GetCellContents(worksheet2, "K8", "Int32")

 Private Function GetCellContents(ByVal worksheet As ExcelWorksheet, ByVal address As String, Optional ByVal type As String = Nothing) As Object
    If worksheet.Cells(address).Value Is Nothing Then
        Return DBNull.Value
    Else
        cellAddress = address
        Select Case type
            Case Is = "String"
                Return Convert.ToString(worksheet.Cells(address).Value)
            Case Is = "Int32"
                Return Convert.ToInt32(worksheet.Cells(address).Value)
            Case Is = "DateTime"
                Return Convert.ToDateTime(worksheet.Cells(address).Value)
            Case Else
                Return worksheet.Cells(address).Value
        End Select
    End If
End Function
于 2012-12-06T17:31:54.530 に答える