Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 使用OleDb提供程序从SQL Server插入ms Access_Sql Server 2008_C# 4.0_Ms Access_Ado.net_Ms Access 2003 - Fatal编程技术网

Sql server 2008 使用OleDb提供程序从SQL Server插入ms Access

Sql server 2008 使用OleDb提供程序从SQL Server插入ms Access,sql-server-2008,c#-4.0,ms-access,ado.net,ms-access-2003,Sql Server 2008,C# 4.0,Ms Access,Ado.net,Ms Access 2003,In Remou很好地描述了如何使用以下语法将数据从SQL Server表大容量插入MS Access表: SELECT fld1, fld2 INTO accessTable FROM [sql connection string].sqltable 在他文章中的示例中,Remou使用了ODBC关键字。如果我们要使用而不是 例如,我尝试了以下方法,但不起作用。它在调用ExecuteOnQuery()时给出错误“找不到可安装的ISAM”。AccessConn工作正常,因为我已经用Remou的O

In Remou很好地描述了如何使用以下语法将数据从SQL Server表大容量插入MS Access表:

SELECT fld1, fld2 INTO accessTable FROM [sql connection string].sqltable
在他文章中的示例中,Remou使用了ODBC关键字。如果我们要使用而不是

例如,我尝试了以下方法,但不起作用。它在调用ExecuteOnQuery()时给出错误“找不到可安装的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();

谢谢。

我怀疑使用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”)

但是请注意
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
…由于“[Microsoft][ODBC驱动程序管理器]未找到数据源名称且未指定默认驱动程序”,因此失败

因此,
ODBC子odbcTest()
代码示例中的code>前缀提示说,[ODBC;…]
方法只是从ODBC数据源中拉入数据的访问快捷方式,而无需显式创建链接表。(方括号内的内容是链接表的
TableDef
对象的
.Connect
属性。)

因此,据我所知,Access只支持ODBC链接表(而不支持OLEDB链接表),因此将此方法用于OLDEB将不起作用

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