2010-03-26 38 views
0

我收到一個錯誤,「[Microsoft] [ODBC SQL Server Driver] [SQL Server]'Microsoft'附近的語法不正確。獲取「[Microsoft] [ODBC SQL Server驅動程序] [SQL Server]'Microsoft'附近的語法不正確。

下面是代碼:

Dim conn As ADODB.Connection 
Dim rst As ADODB.Recordset 
Dim stSQL As String 




Public Sub loadData() 
'This was set up using Microsoft ActiveX Data Components version 6.0. 



'Create ADODB connection object, open connection and 
'  construct the connection string object which is the DSN name. 
Set conn = New ADODB.Connection 
conn.ConnectionString = "sql_server" 

conn.Open 
'conn.Execute (strSQL) 

On Error GoTo ErrorHandler 

'Open Excel and run query to export data to SQL Server. 
strSQL = "SELECT * INTO SalesOrders " & _ 
     "FROM OPENDATASOURCE(Microsoft.ACE.OLEDB.12.0;" & _ 
     "Data Source=C:\Workbook.xlsx;" & _ 
     "Extended Properties=Excel 12.0; [Sales Orders])" 

conn.Execute (strSQL) 

'Error handling. 
ErrorExit: 
'Reclaim memory from the cntection objects 
Set rst = Nothing 
Set conn = Nothing 

Exit Sub 

ErrorHandler: 
    MsgBox Err.Description, vbCritical 
    Resume ErrorExit 


'clean up and reclaim memory resources. 
conn.Close 
If CBool(cnt.State And adStateOpen) Then 
Set rst = Nothing 
Set conn = Nothing 

End If 

End Sub 

回答

0

提供商傳遞給OPENDATASOURCE的參數是一個字符串,因此必須加引號。 您也正在處理OPENDATASOURCE調用中的表單,該表單不正確;

 strSQL = "SELECT * INTO SalesOrders " & _ 
     "FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0'," & _ 
     "'Data Source=C:\Workbook.xlsx;" & _ 
     "Extended Properties=Excel 12.0')...[Sales Orders]" 
+0

好的。我明白你的意思了。我做了更改,但是現在我得到[Microsoft] [ODBC SQL Server驅動程序] [SQL Server] OLE DB提供程序「Microsoft.ACE.OLEDB.12.0」用於鏈接服務器「(null)」返回消息「未指定的錯誤」 。 – brohjoe

+0

確保運行該查詢的帳戶有權訪問該文件的帳戶(可能需要讀取和寫入)並確保該文件未在其他位置打開。 (還記得C:\在那個路徑是服務器上的C盤!) –

+0

感謝您的幫助亞歷克斯。你也是Raj! – brohjoe

0

嘗試以下語法

XLS

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[FilePath];Extended Properties=」Excel 8.0;HDR=YES;IMEX=1」 

XLSX

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=[FilePath];Extended Properties=Excel 12.0 Xml;HDR=YES;IMEX=1 

HDR = Yes指定的第一行數據包含列名,而不是數據,以便設置相應的(是,否)

IMEX = 1指定驅動程序應該總是讀「混合」數據列文本

裁判:http://weblogs.asp.net/rajbk/archive/2009/05/02/uploading-an-excel-file-to-sql-through-an-asp-net-webform.aspx

+0

我把'Provider = Microsoft ...',但現在,而不是「不正確的語法附近的Microsoft」,我得到「不正確的語法靠近提供程序。」。 – brohjoe

相關問題