excel - 如何使用visual studio和oracle读取带有特殊字符的excel列名
问题描述
晚安朋友,
我正在将 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
解决方案
当我指出您引用了表名时,您可能会自责,因为它包含一个特殊字符,并且有效..您只是忘记引用列名
SELECT [FECHA/CONV],[CODIGO],[ACUERDO] FROM [FILE$]
他们并不都需要引用,但它不会受到伤害。此外,如果您在设置批量复制列映射时在 oracle 端遇到任何错误,也许可以考虑将 excel 名称别名为更简单的名称,并使用它
SELECT [FECHA/CONV] as A,CODIGO,ACUERDO FROM [FILE$]
...
...Add(New OracleBulkCopyColumnMapping("A", "FECHA"))
推荐阅读
- java - Java中的扫描仪可以读取pdf文件吗?流式阅读
- firebase - 哪组 API 计入 Firebase Auth API 限制(500 个请求/秒)?
- mysql - 在不存在数据的左连接中包括行
- django - 如何将实例对象与 request.FILES 和 request.POST 一起使用
- javascript - 仅将新记录附加到表 vue js
- rest - 休息:获取儿童资源
- angular - 向我们的用户显示可观察到的错误消息
- api - 如何从本地 IP 获得改造响应
- java - Java:没有输入时如何退出方法?
- load-balancing - HAProxy 多端口映射 - 将请求转发到与同一后端服务器上的传入请求相同的端口