C# 如何从SQL server Compact导出数据以访问MDB

C# 如何从SQL server Compact导出数据以访问MDB,c#,database,ms-access,export,sql-server-ce,C#,Database,Ms Access,Export,Sql Server Ce,我需要一个解决方案来传输所有数据从SQL Server CE访问mdb数据库 我尝试了这种方法解决方案2,但在连接字符串或子句中未指定任何数据库时出错 如果我连接到非紧凑型SQL server,代码就可以工作 我想问题在于in子句中的连接字符串,但我不知道如何更改它 这是我的密码: private void ExportTable(string tableName, string source, string destination) { var connStr = string.For

我需要一个解决方案来传输所有数据从SQL Server CE访问mdb数据库

我尝试了这种方法解决方案2,但在连接字符串或子句中未指定任何数据库时出错

如果我连接到非紧凑型SQL server,代码就可以工作

我想问题在于in子句中的连接字符串,但我不知道如何更改它

这是我的密码:

private void ExportTable(string tableName, string source, string destination)
{
    var connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", destination);
    var cmdText = string.Format("SELECT * INTO {0} FROM [{0}] IN ''[Data Source={1};Max Database Size='4000';Persist Security Info=False;];", tableName, source);

    using (var conn = new OleDbConnection(connStr))
    {
            conn.Open();
            using (var cmd = new OleDbCommand(cmdText, conn))
            {
                cmd.ExecuteNonQuery(); // error on this line
            }

            conn.Close();
    }
}
连接字符串:数据源={1};最大数据库大小='4000';持久安全信息=False;当我直接连接到数据库时工作正常

更新:显然,子句中源数据库的格式应如下所示: [类型;数据库=路径]

见:

当我使用

var cmdText = string.Format("SELECT * INTO {0} FROM [{0}] IN ''[SqlServer CE; DATABASE={1}];", tableName, source);
我遇到不同的错误:找不到可安装的ISAM

您知道SQLServerCE的正确类型吗?是否得到支持?我找不到任何关于它的信息


我也尝试过:SQL CE、SQLSERVER.CE、Microsoft.SQLSERVER.CE.OLEDB.3.5、Microsoft.SQLSERVER.MOBILE.OLEDB.3.0等-同样的错误…

我对此还是新手,但据我所知,无法导入或导出私有void。它只能在该类中读取或作为可执行文件读取。

我认为这里的绊脚石是您尝试使用的技巧需要到SQL Server的ODBC连接,并且据我所知,SQL Server Compact没有ODBC驱动程序。我非常确定Access中的语法[ODBC;Driver=…]没有等效的OLEDB,因此这种技巧在SQL Server Compact中不起作用。正如您所发现的,它确实适用于真正的SQL Server,因为该平台支持ODBC连接

我很想看看我能用OLEDB连接到SQLServerCompact数据库在C中实现什么,正如@MrZak在他的评论中指出的那样。我得出了以下结论。它将SQL表拉入DataTable,将每一行的状态设置为Added,然后在Access中将INSERT更新到相应的表中

字符串myConnectionStringMDB= Provider=Microsoft.ACE.OLEDB.12.0+ @数据源=C:\Users\Gord\Desktop\fromCE.mdb;; 字符串myConnectionStringSQL= Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5+ @数据源=C:\Users\Public\test\myData.sdf;; 使用OLEDB连接conSQL=新OLEDB连接, conMDB=新的OLEDB连接 { conSQL.ConnectionString=myConnectionStringSQL; conSQL.Open; conMDB.ConnectionString=myConnectionStringMDB; conMDB.Open; 使用OleDbCommand cmdSQL=新OleDbCommand, cmdMDB=新的OleDbCommand { cmdSQL.CommandType=System.Data.CommandType.Text; cmdSQL.Connection=conSQL; cmdSQL.CommandText=从[表1]中选择*; var daSQL=new System.Data.OleDb.OleDbDataAdaptercmdSQL; var dt=新System.Data.DataTable; Filldt; foreach System.Data.DataRow dr在dt.行中 { //将行状态从未更改更改为已添加so。下面的更新将插入它们 塞特博士补充道; } cmdMDB.CommandType=System.Data.CommandType.Text; cmdMDB.Connection=conMDB; cmdMDB.CommandText=从[表1]中选择*; var daMDB=new System.Data.OleDb.oledbdataadaptercmdb; var cbuilderMDB=新的OleDbCommandBuilderdaMDB; cbuilderMDB.QuotePrefix=[; cbuilderMDB.QuoteSuffix=]; daMDB.updatet; } conSQL.Close; conMDB.关闭; }
对不起,你最好读一下这个问题。private void它是我的C方法的签名-它与数据导出无关。你能显示字符串source中的内容吗?@Tom Studee:source和Destination分别保存sdf和mdb文件的路径。这里可能描述了类型-?