1

すべてのデータを SQL Server CE から Access mdb データベースに転送するソリューションが必要です。

このアプローチhttp://www.codeproject.com/Answers/483989/HowplustoplusExportplusSQLplusTablesplusToplusAcce#answer2 (ソリューション # 2) を試しましたが、「接続文字列または IN 句にデータベースが指定されていません」というエラーが表示されました。

非コンパクト SQL サーバーに接続すると、コードが機能します。

問題は 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();
    }
}

接続文字列: Data Source={1};Max Database Size='4000';Persist Security Info=False; データベースに直接接続すると正常に動作します。

更新:どうやら IN 句のソース DB の形式は次のようになり
ます。データベース =パス]

(参照: http://answers.microsoft.com/en-us/office/forum/office_2010-access/access-2010-runtime-error-3170-could-not-find/0b085797-618a-488f-b1b4-30af00f04b3f )

私が使うとき

var cmdText = string.Format("SELECT * INTO {0} FROM [{0}] IN ''[SqlServer CE; DATABASE={1}];", tableName, source);

別のエラーが表示されます: インストール可能な ISAM が見つかりませんでした。

SQLServer CE の正しいを知っていますか? それはまったくサポートされていますか?私はそれについての情報を見つけることができませんでした。

私も試しました:SQL CE、SQLSERVER.CE、Microsoft.SQLSERVER.CE.OLEDB.3.5、Microsoft.SQLSERVER.MOBILE.OLEDB.3.0など - 同じエラー...

4

2 に答える 2

1

ここでの障害は、使用しようとしているトリックには SQL Server への ODBC 接続が必要であり、私の知る限り、SQL Server Compact 用の ODBC ドライバーがないことです。Accessの構文には OLEDB に相当するものがないことは確か[ODBC;Driver=...]なので、このトリックは SQL Server Compact では機能しません。(お気づきのように、ODBC 接続はそのプラットフォームでサポートされているため、「実際の」SQL Server で動作します。)

SQL Server Compact データベースへの OLEDB 接続 ( @MrZak がコメントで指摘したように、これはサポートされています) を使用して、C# で何ができるか知りたいと思っていました。私は次のことを思いつきました。SQL テーブルを DataTable にプルし、各行のステータスを「追加済み」に設定してから、Access の対応するテーブルを更新 (挿入) します。

string myConnectionStringMDB =
        "Provider=Microsoft.ACE.OLEDB.12.0;" +
        @"Data Source=C:\Users\Gord\Desktop\fromCE.mdb;";
string myConnectionStringSQL =
        "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;" +
        @"Data Source=C:\Users\Public\test\myData.sdf;";

using (OleDbConnection conSQL = new OleDbConnection(),
        conMDB = new OleDbConnection())
{
    conSQL.ConnectionString = myConnectionStringSQL;
    conSQL.Open();
    conMDB.ConnectionString = myConnectionStringMDB;
    conMDB.Open();

    using (OleDbCommand cmdSQL = new OleDbCommand(),
            cmdMDB = new OleDbCommand())
    {
        cmdSQL.CommandType = System.Data.CommandType.Text;
        cmdSQL.Connection = conSQL;
        cmdSQL.CommandText = "SELECT * FROM [Table1]";

        var daSQL = new System.Data.OleDb.OleDbDataAdapter(cmdSQL);
        var dt = new System.Data.DataTable();
        daSQL.Fill(dt);

        foreach (System.Data.DataRow dr in dt.Rows)
        {
            // change row status from "Unchanged" to "Added" so .Update below will insert them
            dr.SetAdded();
        }

        cmdMDB.CommandType = System.Data.CommandType.Text;
        cmdMDB.Connection = conMDB;
        cmdMDB.CommandText = "SELECT * FROM [Table1]";
        var daMDB = new System.Data.OleDb.OleDbDataAdapter(cmdMDB);
        var cbuilderMDB = new OleDbCommandBuilder(daMDB);
        cbuilderMDB.QuotePrefix = "[";
        cbuilderMDB.QuoteSuffix = "]";
        daMDB.Update(dt);
    }
    conSQL.Close();
    conMDB.Close();
}
于 2013-06-22T21:11:26.030 に答える
-1

私はまだこれに慣れていませんが、私が理解している「プライベートボイド」はインポートまたはエクスポートできません。そのクラスで、または実行可能ファイルとしてのみ読み取り可能です。

于 2013-06-22T17:37:28.180 に答える