0

vb.net で Microsoft.ACE.OLEDB.12.0 プロバイダーを使用して Excel スプレッドシートを作成しようとしていますが、255 文字を超えるフィールドを定義できないようです。

テーブルを作成するための現在のコードは次のとおりです。

 create table [table_name] ([column_1] VarChar)

VarChar が 255 文字に制限されていることは理解していますが、それ以上の文字を保持できる代替手段を見つけることができません。

私はこれを試しました:

 create table [table_name] ([column_1] LongVarChar)

「フィールド定義の構文エラー」例外が発生しました。

同様に、LongVarWChar、Memo、NText(8000) などを試してみましたが、同じ結果が得られました。助言がありますか?

編集:これが私の接続文字列です:

 "Provider=Microsoft.ACE.OLEDB.12.0;" &
 "Data Source=" & destinationFile & ";" &
 "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"

編集2:これが私がやろうとしていることの基本的な考え方です

System.Data.OleDb のインポート System.Text のインポート

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        dim destinationFile = "c:\users\dell\desktop\test\test_" & Now.ToString("yyyyMMdd_HHmmssfffff") & ".xlsx"
        Dim oleDbConnString =
                "Provider=Microsoft.ACE.OLEDB.12.0;" &
                "Data Source=" & destinationFile & ";" &
                "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        Dim oleDbConn as New OleDbConnection(oleDbConnString)
        Dim oleDbComm as New OleDbCommand("create table Sheet1 (column_1 LongText);", oleDbConn)

        oleDbConn.Open
        oleDbComm.ExecuteNonQuery
        oleDbConn.Close

        Dim bigText as New StringBuilder()
        For i = 0 to 255
            bigText.Append(".")
        Next
        oleDbComm.CommandText = "insert into Sheet1(column_1) values ('" & bigText.ToString & "');"

        oleDbConn.Open
        oleDbComm.ExecuteNonQuery
        oleDbConn.Close

        Process.Start(destinationFile)
    End Sub
End Class

Button1_Click サブルーチンの最後の ExecuteNonQuery 呼び出しで例外がスローされます。"LongText" の代わりに、Ace エンジンを使用した Excel データ ソースでは無効なデータ タイプを含め、さまざまなデータ タイプを試しました。255 文字を超える文字列を挿入できるものは見つかりませんでした。

4

2 に答える 2

0

これが私のために働いたコードです。重要なのは、LongText 型のフィールドを持つテーブルを作成し、接続を閉じずにテーブルに挿入することです。接続を閉じて再度開くと、Ace ドライバは最初の数行をスキャンしてデータ型を決定します。テーブルの作成後に接続を閉じるとデータが存在しないため、意図した LongText ではなく Text が適切なタイプであると判断されます。

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim destinationFile = "c:\users\dell\desktop\test\test_" & Now.ToString("yyyyMMdd_HHmmssfffff") & ".xlsx"
        Dim oleDbConnString =
                "Provider=Microsoft.ACE.OLEDB.12.0;" &
                "Data Source=" & destinationFile & ";" &
                "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        Dim oleDbConn as New OleDbConnection(oleDbConnString)
        Dim oleDbComm as New OleDbCommand("create table Sheet1 (column_1 LongText);", oleDbConn)

        Dim bigText as New StringBuilder()
        For i = 0 to 255
            bigText.Append(".")
        Next

        oleDbConn.Open
        oleDbComm.ExecuteNonQuery
        'after creating the table with column of datatype LongText,
        'you mustn't close the connection prior to inserting text longer
        'than 255 characters - keep it open!!
        oleDbComm.CommandText = "insert into Sheet1(column_1) values ('" & bigText.ToString & "');"
        oleDbComm.ExecuteNonQuery
        oleDbConn.Close

        Process.Start(destinationFile)
    End Sub
End Class
于 2016-09-28T01:44:37.937 に答える