0

ユーザーがExcelファイルを選択し、そのファイルからデータを読み取ることができるページを作成できるようにするために、さまざまな方法を試しました。これまでのところ、私が得たのはエラーだけです。

私の最新のエラーは、「更新できません。データベースまたはオブジェクトは読み取り専用です。」です。

これが私のコードです:

Protected Sub Upload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Upload.Click
    If (testFile.HasFile) Then
        Dim ds As DataSet
        Dim strFileType As String = System.IO.Path.GetExtension(testFile.FileName).ToString().ToLower()

        Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
        Dim MyConnection As System.Data.OleDb.OleDbConnection
        MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & testFile.FileName & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=2")

        ' Select the data from Sheet1 ([in-house$]) of the workbook.
        MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)

        ds = New System.Data.DataSet
        MyCommand.Fill(ds) - __This is where the error points.__
        grvExcelData.DataSource = ds.Tables(0)

    End If
End Sub

なぜこれが投げられているのかについてのアイデアはありますか?今のところ、データをグリッドビューに出力しようとしています。後で各セルをループする必要がありますが、一度に1ステップずつ試しています。

また、これを行うためのより良い方法があれば、私はそれを完全に受け入れています!

ありがとう!

4

1 に答える 1

0

ただしstrFileType、開きたいファイルの拡張子です。(つまり、filename.xlsの場合は.xlsの部分にすぎ
ません)おそらく、完全なファイル名が必要です。

    MyConnection = New System.Data.OleDb.OleDbConnection( _
    "provider=Microsoft.Jet.OLEDB.4.0; " & _
    "data source=" & testFile.FileName & "; " & _
    "Extended Properties=Excel 8.0")

さて、「より良い部分」について:
あなたは接続を閉じません、そしてこれは決して起こらないはずです。単純なUsingブロックはあなたを救うでしょう

    Using MyConnection = New OleDbConnection( _
        "provider=Microsoft.Jet.OLEDB.4.0; " & _
        "data source=" & strFileType & "; " & _
        "Extended Properties=Excel 8.0")

        ' Select the data from Sheet1 ([in-house$]) of the workbook.
        Using MyCommand = New OleDbDataAdapter("select * from [Sheet1$]", MyConnection)
            Dim ds = New System.Data.DataSet
            MyCommand.Fill(ds) 
        End Using
    End Using

また、すべてのOleDb変数の名前空間プレフィックスが長くなるのを避けるために、Importディレクティブを追加することをお勧めします。

于 2013-03-15T18:26:22.650 に答える