【问题标题】:how to read excel column names with special characters with visual studio and oracle如何使用visual studio和oracle读取带有特殊字符的excel列名
【发布时间】:2021-07-17 00:31:28
【问题描述】:

朋友们晚安,

我正在上传一个excel到oracle,我发现excel的某些列在列名中有特殊字符,这些是:

“FECHA/CONV”和“N°CODIGO”

如果我删除特殊字符,它可以正常工作,但我无法编辑 excel 文件,我只需要阅读它,

我怎样才能使视觉不会在 mappeo 和选择到 excel 表中产生错误。

我将不胜感激。

我的确切错误是: 设置的部分参数没有设置任何值。

谢谢,

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim _connString As String = "Data Source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.100.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = ORACLE))); User Id=USER; password=PASS;"
        Dim rutacarpeta As String
        Dim NombreArchivo As String
        Dim tablaBBDD As String
        'Dim ot As OracleTransaction = conn.BeginTransaction(IsolationLevel.ReadCommitted)
        Using conn As OracleConnection = New OracleConnection(_connString)
            conn.Open()
            Dim ot As OracleTransaction = conn.BeginTransaction(IsolationLevel.ReadCommitted)
            Try

                rutacarpeta = "C:\2021\"
                NombreArchivo = "FILE_0.xlsx"
                tablaBBDD = "FILE_TEST"
                Dim xlsxConn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=Yes;IMEX=1;';"
                xlsxConn = String.Format(xlsxConn, rutacarpeta + NombreArchivo).Trim()

                Using excel_con As OleDbConnection = New OleDbConnection(xlsxConn)
                    excel_con.Open()
                    'Dim hoja As String = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing).Rows(0)()
                    Dim command As OleDbCommand = New OleDbCommand("SELECT FECHA/CONV,CODIGO,ACUERDO FROM [FILE$]", excel_con)

                    Dim dr As OleDbDataReader
                    dr = command.ExecuteReader()

                    Using bulkCopy As OracleBulkCopy = New OracleBulkCopy(conn)
                        bulkCopy.BulkCopyTimeout = 90000
                        bulkCopy.DestinationTableName = tablaBBDD
                    bulkCopy.ColumnMappings.Add(New OracleBulkCopyColumnMapping("FECHA/CONV", "FECHA"))
                    bulkCopy.ColumnMappings.Add(New OracleBulkCopyColumnMapping("N°CODIGO", "CODIGO"))
                    bulkCopy.ColumnMappings.Add(New OracleBulkCopyColumnMapping("ACUERDO", "ACUERDO"))
                        bulkCopy.WriteToServer(dr)
                        ot.Commit()

                        bulkCopy.Close()
                    End Using
                End Using

            Catch ex As Exception
                Try
                    ot.Rollback()
                Catch ex1 As Exception
                    MessageBox.Show(ex1.Message)
                End Try

                MessageBox.Show(ex.Message)

            End Try
        End Using
    End Sub

【问题讨论】:

标签: excel oracle vb.net winforms oledb


【解决方案1】:

当我指出您引用了表名时,您可能会自责,因为它包含一个特殊字符,并且有效..您只是忘记引用列名

SELECT [FECHA/CONV],[CODIGO],[ACUERDO] FROM [FILE$]

他们并不都需要引用,但不会受到伤害。此外,如果您在设置批量复制列映射时在 oracle 端遇到任何错误,或许可以考虑将 excel 名称别名为更简单的名称,并使用该名称

SELECT [FECHA/CONV] as A,CODIGO,ACUERDO FROM [FILE$]

...

...Add(New OracleBulkCopyColumnMapping("A", "FECHA"))

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多