2013-04-06 101 views
0

this post Remou已很好地描述OLEDB提供如何使用以下語法散裝從SQL Server表將數據插入到MS Access表:插入從SQL服務器MS Access中使用

SELECT fld1, fld2 INTO accessTable FROM [sql connection string].sqltable 

在實施例中他的帖子,Remou正在使用ODBC關鍵字。如果我們要使用SQL Server Native Client 10.0 OLE DB Provider而不是SQL Server Native Client 10.0 ODBC Driver

例如,我嘗試了以下方法,但它不起作用。它在給ExecuteNonQuery()的調用上給我錯誤「無法找到可安裝的ISAM」。 AccessConn正常工作,因爲我用Remou的ODBC示例測試了它。這個問題似乎與SQL Server的連接字符串有關。

OleDbConnection AccessConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\\TestFolder\\Test.mdb'"); 
OleDbCommand AccessCmd = new OleDbCommand("INSERT INTO Table2 SELECT * FROM [OLEDB;Provider=SQLNCLI10;Server=MyServer\\SQLEXPRESS;Database=TestDb1;Uid=TestUser;Pwd=TestPassword].Table1", AccessConn); 
AccessCmd.ExecuteNonQuery(); 
AccessConn.Close(); 

謝謝。

回答

0

我懷疑根本沒有辦法做到你所描述的使用OLEDB。

我測試了以下VBA代碼和它的工作:

Sub odbcTest() 
Dim cdb As DAO.Database, sql As String 
Set cdb = CurrentDb 
sql = _ 
     "SELECT ID, LastName INTO myContacts " & _ 
     "FROM [ODBC;Driver={SQL Server Native Client 10.0};Server=.\SQLEXPRESS;Database=myDb;Trusted_Connection=yes;].dbo.myContacts" 
cdb.Execute sql, dbFailOnError 
End Sub 

然後,我測試了(我希望會)的OLEDB相當於並將其與你有同樣的錯誤(「找不到失敗。安裝ISAM「)

Sub oledbTest() 
Dim cdb As DAO.Database, sql As String 
Set cdb = CurrentDb 
sql = _ 
     "SELECT ID, LastName INTO myContacts " & _ 
     "FROM [OLEDB;Provider=SQLNCLI10;Server=.\SQLEXPRESS;Database=myDb;Trusted_Connection=yes;].dbo.myContacts" 
cdb.Execute sql, dbFailOnError 
End Sub 

但是請注意括號內ODBC;OLEDB;前綴:他們並不需要建立在‘正常’的連接。下面的代碼工作...

Sub adoTest() 
Dim con As Object 
Const sqlInstance = ".\SQLEXPRESS" 
Set con = CreateObject("ADODB.Connection") 
con.Open "Driver={SQL Server Native Client 10.0};Server=" & sqlInstance & ";Database=myDb;Trusted_Connection=yes;" 
MsgBox "ODBC connection to " & sqlInstance & " established." 
con.Close 
Set con = Nothing 
End Sub 

...但是當我添加一個ODBC;子句的連接字符串的開頭...

Sub adoTest() 
Dim con As Object 
Const sqlInstance = ".\SQLEXPRESS" 
Set con = CreateObject("ADODB.Connection") 
con.Open "ODBC;Driver={SQL Server Native Client 10.0};Server=" & sqlInstance & ";Database=myDb;Trusted_Connection=yes;" 
MsgBox "ODBC connection to " & sqlInstance & " established." 
con.Close 
Set con = Nothing 
End Sub 

...它失敗,「[微軟] [ODBC驅動程序管理器]未找到數據源名稱並且沒有指定默認驅動程序「。

所以,第一個Sub odbcTest()碼樣本中ODBC;前綴上面是一個線索,該FROM [ODBC;...]方法僅僅是一個訪問快捷方式從ODBC數據源拉數據,而無需顯式地創建鏈接表。 (方括號中那東西會是TableDef對象的.Connect屬性鏈接表。)

因此,因爲據我所知訪問只支持ODBC鏈接表(而不是OLEDB鏈接表),使用該使用OLDEB的方法將不起作用。