使用odbc excel驱动程序转换数据类型

时间:2011-02-04 16:32:26

标签: vb.net excel odbc

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

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

我尝试了它,但是出错了。

这是我的功能:

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(代码为varchar)'中的语法错误(缺少运算符)。用于ODBC驱动程序的Microsoft OLE DB提供程序”
我已经尝试了varchar,varchar(10)和text作为具有相同结果的转换类型。

2 个答案:

答案 0 :(得分:4)

尝试:

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

在Jet / ACE SQL中无法使用Cast。

答案 1 :(得分:0)

我最终尝试使用ACE连接字符串而不是Microsoft Excel Driver。

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

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