0

SqlBulkCopy を使用して Excel データを mssql にインポートしています。Excelには、ラインフィードとキャリッジリターンを含む2列のデータ行が多数あります(以下のオンラインでの読み取りが真実であることを理解しています)

Chr(10) == vbLF == Line Feed (LF)
Chr(13) == vbCR == Carriage Return (CR)
Chr(13) & Chr(10) == vbCrLf == Carriage Return/Line Feed

SqlBulkCopy は完全に機能していますが、mssql にインポートされたときに Excel セルにあるキャリッジ リターン/ライン フィードを保持したいと考えています。現在、長い文字列として挿入されています。

例: セルの 1 つが [1 つのセルに複数の行] 以下の内容を持っています。

1st line in cell 1
2nd line in cell 1

SqlBulkCopy を使用して Excel データを mssql にインポートすると、上記のステータス列が次のように挿入されます。

"1st line in cell 12nd line in cell 1"

以下のようにデータベースに挿入されるように、Excel セルから「キャリッジ リターン/ライン フィード」を保持するにはどうすればよいですか?

1st line in cell 1
2nd line in cell 1

以下は私が持っているコードです。

Dim conectionstring As String = ""
If strExt.ToLower() = ".xls" Then
    conectionstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Excel & ";Extended Properties=Excel 8.0"
ElseIf strExt.ToLower() = ".xlsx" Then
    conectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Excel & ";Extended Properties=Excel 12.0"
End If
Dim ExcelConnection As New System.Data.OleDb.OleDbConnection(conectionstring)
ExcelConnection.Open()
Dim expr As String = "SELECT * FROM [Sheet1$] where not U_Id is null"
Dim objCmdSelect As OleDbCommand = New OleDbCommand(expr, ExcelConnection)
Dim objDR As OleDbDataReader
Dim SQLconn As New SqlConnection()

SQLconn.ConnectionString = ConnString
SQLconn.Open()

Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(SQLconn)

    bulkCopy.DestinationTableName = "SL_DataInfo_Temp"
    bulkCopy.ColumnMappings.Add("U_Id", "di_id")
    bulkCopy.ColumnMappings.Add("File_Ref", "di_fileRef")
    bulkCopy.ColumnMappings.Add("Date", "di_date")
    bulkCopy.ColumnMappings.Add("Status", "di_status")

    objDR = objCmdSelect.ExecuteReader

    If objDR.HasRows Then ''And objDR.FieldCount >= 13 Then
        bulkCopy.WriteToServer(objDR)
        ExcelConnection.Close()
        SQLconn.Close()
    End If 
End Using
4

0 に答える 0