【问题标题】:Cast a data type with the odbc excel driver使用 odbc excel 驱动程序转换数据类型
【发布时间】:2011-06-21 11:42:20
【问题描述】:

我正在使用 Microsoft Excel 驱动程序将 Excel 文档导入 adodb.recordset,以便我可以删除重复的行并将其放入 SQL Server 数据库中。

第一列具有 192、13U、JJJ 等值,但由于某种原因,查询将其转换为双精度值,并且任何具有 alpha 值的行都将转换为 Null。据我所知,这是因为多数类型是数字而不是文本。

我尝试投射它,但出现错误。

这是我的功能:

Function Read_Excel(ByVal sFile As String) As ADODB.Recordset
    On Error GoTo fix_err
    Dim rs As ADODB.Recordset
    rs = New ADODB.Recordset
    Dim sconn As String

    rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient
    rs.CursorType = ADODB.CursorTypeEnum.adOpenKeyset
    rs.LockType = ADODB.LockTypeEnum.adLockBatchOptimistic

    sconn = "DRIVER=Microsoft Excel Driver (*.xls); ImportMixedTypes=Text; " & "DBQ=" & sFile & ";Extended Properties='Excel 8.0;HDR=No;IMEX=1';"
    rs.Open("SELECT Code, Description FROM [sheet1$]", sconn)
    tot += rs.RecordCount
    rs.Close()
    rs.Open("SELECT Distinct * FROM [sheet1$]", sconn)
    Read_Excel = rs
    rs = Nothing
    Exit Function
fix_err:
    Debug.Print(Err.Description + " " + _
                Err.Source, vbCritical, "Import")
    Err.Clear()
End Function

有没有办法轻松地将第一列作为文本获取?

编辑:当我尝试"SELECT cast(RPOCode as varchar(10)), Description FROM [sheet1$]" 时出现此错误
“[Microsoft][ODBC Excel 驱动程序] 查询表达式 'cast(Code as varchar)' 中的语法错误(缺少运算符)。用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序”
我尝试了 varchar、varchar(10) 和 text 作为转换类型,结果相同。

【问题讨论】:

  • WHAT 你遇到了什么错误?!?!我们不是读心者 - 你需要让我们知道!
  • "[Microsoft][ODBC Excel Driver] 查询表达式'cast(Code as varchar)'中的语法错误(缺少运算符)。Microsoft OLE DB Provider for ODBC Drivers" 我试过 varchar 和 text作为铸造类型。

标签: vb.net excel odbc


【解决方案1】:

我最终尝试了 ACE 连接字符串,而不是 Microsoft Excel 驱动程序的连接字符串。

sconn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sFile & ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"";"

并确保 IMEX=1 部分在其中。我认为 Microsoft Excel 驱动程序没有正确使用扩展属性。

【讨论】:

    【解决方案2】:

    试试:

     rs.Open("SELECT CStr([Code]), Description FROM [sheet1$]", sconn)
    

    Cast 在 Jet/ACE SQL 中不可用。

    【讨论】:

    • 这消除了错误,但我只是得到一个空字符串而不是 Null,就像它将 Null 转换为字符串一样。
    • 关于 ACE 的那部分帮助我弄清楚了。我记得在connectionstrings.com/excel 上看到过,但没想过要尝试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多