1

私は ac# コンテストに参加し、データベースをオフラインで操作する必要があります。データベースはすべての PC で動作するはずなので、誰かが私のプロジェクトをコピーしてプログラムを実行すると、すべてが同じように動作します。

Add - New Item でローカル データベースを作成し、データベースを作成しました。

私のコード

private void Form1_Load(object sender, EventArgs e)
{
    SqlCeConnection con = new SqlCeConnection(Properties.Settings.Default.bazalocalaConnectionString);
    con.Open();
    SqlCeCommand com = new SqlCeCommand("select * from Tabela",con);
    SqlCeDataReader r = com.ExecuteReader();
    while (r.Read())
    {
        MessageBox.Show(r["nume"].ToString());
    }
      com = new SqlCeCommand("create table taby(id int identity(1,1) primary key,nume nvarchar(10),prenume nvarchar(10) )", con);
    com.ExecuteNonQuery();
    con.Close();
}

私が抱えている問題は、テーブルを作成してプログラムを閉じた後、サーバーエクスプローラーに新しいテーブルが表示されないことです..なぜですか? 私は何か間違ったことをしましたか?

このように作業すると、すべての PC で動作しますか?

ローカル データベースを作成すると、Visual Studio によって接続文字列が自動生成されます。

Data Source=|DataDirectory|\bazalocala.sdf
4

4 に答える 4

2

置換文字列|DataDirectory|は、プログラムが実行されるディレクトリに置き換えられます。
Visual Studio のデバッグ セッション中、このディレクトリは BIN\DEBUG (または x86 バリアント) です。
したがって、テーブルは BIN\DEBUG フォルダーにあるデータベースに追加されますが、サーバー エクスプローラー ウィンドウには、プロジェクト フォルダーにあるデータベースを指す接続があります。

BIN\DEBUG フォルダー内のデータベースを指す別の接続を追加すると、テーブルが表示されます。

VS の外部でプログラムを実行する場合、この問題は発生しません。

問題をさらに複雑にするCopy to output directoryために、SDF ファイルのプロパティがあります。このプロパティが に設定されてCopy Alwaysいる場合、デバッグ セッションを開始するたびに、SDF ファイルがプロジェクト フォルダーから BIN\DEBUG フォルダーにコピーされ、ファイルと前回のデバッグ セッションで行った変更が効果的に上書きされます。このプロパティを次のように変更する必要がありますCopy if Newer

于 2014-05-12T17:59:42.593 に答える
1

あなたはこのように試すことができます

    try
    {
        SqlCeConnection con = new SqlCeConnection(Properties.Settings.Default.bazalocalaConnectionString);
        con.Open();
        //
        // The following code uses an SqlCommand based on the SqlConnection.
        //
        using (SqlCeCommandcommand = new SqlCeCommand("CREATE TABLE taby(id int identity(1,1) primary key,nume nvarchar(10),prenume nvarchar(10) );", con))
            {
                command.ExecuteNonQuery();
            }

    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
于 2014-05-12T18:00:22.183 に答える
0
SqlCeConnection con = new SqlCeConnection("Data Source=K:/PROJECT LOCATION/Database1.sdf");

con.Open();           
string x = "insert into TABLE(your columns) values (what values you want)";
SqlCeCommand cmd = new SqlCeCommand(x, con);
try
{
    cmd.ExecuteNonQuery();
}
catch
{
    MessageBox.Show(" Something is wrong","ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
con.Close();

接続を作成し、ビン/デバッグからの場所ではなく、データベースの完全な場所を指定しました。次に、接続を開き、文字列 x を書き込んで、そのデータをデータベースに保存しました。try-catch 句でテストした新しいコマンドを作成し、最後に接続を閉じました。

于 2015-05-07T12:47:22.037 に答える