0

インストール中にAppDataに書き込まずに展開する必要があるWindowsプログラムがありますが、そこにSQLCEデータベースが必要です。

だから私は2つのアイデアを持っています:それをプログラムにデプロイしてから最初の起動時にコピーするか、または私が望むものはすべてをコーディングします。

だから私はこのスレッドがVSDBCMDなしでVS2010データベースプロジェクトを展開しているのを見つけましたか?これは基本的に悪い考えだと言っていますが、回答者がすべてを知っているとは思わないので、より良い考えがあります。私はそのコードの一部をどこかで見つけました:

string connStr = "Data Source = FooDatabase.sdf; Password = SomePassword";

if (File.Exists("FooDatabase.sdf"))
    File.Delete("FooDatabase.sdf");

SqlCeEngine engine = new SqlCeEngine(connStr);
engine.CreateDatabase();

using (var conn = new SqlCeConnection(connStr)) {
    conn.Open();

    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandText = "CREATE TABLE FooTable(col1 int, col2 ntext)";
    cmd.ExecuteNonQuery();

ここから:プログラムでSQLCEデータベースを作成します

私が求めているのは、これがどのPCでも機能するかどうか、そしてEntityFrameworkを使用するためにコードを実行する必要があるかどうかです。私は次のようなことを考えていました

public class FooContext : System.Data.Entity.DbContext 
{
    public FooContext() : base("Data Source = FooDatabase.sdf; Password = SomePassword") { }
    public DbSet<FooTable> FooTables { get; set; }
}

public class FooTable
{
    public int col1 { get; set; }
    public string col2 { get; set; }
}

しかし、私はそれを機能させることができません。

接続文字列だけが間違っている可能性がありますが、それを使用しないようにするにはどうすればよいですか、または正しい接続文字列はどのように見えますか?

plzを助けますか?

4

1 に答える 1

0

スタートアップロジックでこれを使用してみてください

private static void InitializeDB()
{
   const string connectionString = "Data Source = FooDatabase.sdf; Password = 123";
   Database.DefaultConnectionFactory = new
      SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", connectionString);
}

この投稿を見てください

于 2013-02-06T13:30:39.683 に答える