将SQL Server数据库转换为压缩:运行Executesql命令时出错

时间:2013-12-03 05:23:40

标签: c# sql sql-server sql-server-ce

我使用下面的代码将SQL Server数据库转换为压缩数据库。如果我使用visual studio 2010构建应用程序,它可以正常工作,因为它将目标指向.net 4.0。但是如果我在visual studio中构建或运行它(我可以将它定位到.net 3.5或2)它无法正常工作。 ExecuteSql(filename)无效。但是,如果我访问该文件,我可以看到生成的脚本。所以我需要在SSMS中手动运行脚本。因此,我需要替代方法来运行生成的脚本,该脚本甚至可以在.net 2或3.5中运行。所以请帮助我。

using ErikEJ.SqlCeScripting;
using System;
using System.IO;
using System.Data.SqlServerCe;

class Program
{
    static void Main(string[] args)
    {
        try
        {

            //--------Convert sql server express to compact db---------------------
        //http://erikej.blogspot.dk/2013/09/sql-server-compact-code-snippet-19.html
            using (IRepository serverRepository = new ServerDBRepository("Data Source=PCNAME\\SQLEXPRESS,25111;Initial Catalog=mydb;Persist Security Info=True;User ID=admin;password =mypassword"))
            {
                string fileName = Path.GetTempFileName();
                var generator = new Generator(serverRepository, fileName);
                generator.ScriptDatabaseToFile(Scope.SchemaData);

                var helper = new SqlCeHelper();
                var sqlCeConnectionString = @"Data Source=C:\Northwind.sdf";
                helper.CreateDatabase(sqlCeConnectionString);

                using (IRepository sqlCeRepository = new DBRepository(sqlCeConnectionString))
                {
                    sqlCeRepository.ExecuteSql(fileName);
                }
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }
        Console.ReadKey();
    }
}

1 个答案:

答案 0 :(得分:0)

使用:

Process.Start("sqlcecmd.exe" "-d """Data Source=C:\\test2.sdf""" -i c:\input.txt");

并将sqlcecmd.exe(或sqlcecmd40.exe)与您的应用作为内容包含在内。