1

Visual C#2008プロジェクトがあります。プロジェクトエクスプローラー内にSQLCEデータベース(sdfファイル)があるので、デザイナーでデータベースとデータセットを操作できます。実行時に、sdfファイルが出力ディレクトリにコピーされます。ユーザーが自分のデータベースを保存すると、このsdfファイルはユーザーが選択したファイル名にコピーされ、データセットがコピーに保存されます。今のところ問題ありません。

可能であれば、これを別の方法で行いたいと思います。プログラムの最初の実行時にsdfファイルをコピーするのではなく、ユーザーがデータベースを保存するときに、選択した名前を使用してsdfファイルをコピーし、データセットを保存するように設定したいと思います。 。

ファイルをバイナリとして書き出す方法を読んだことがありますが、これは機能しますが、数行のコードが必要で、不要に思えます。プログラムに「ねえ、このsdfファイルをすぐにコピーして」と伝える方法はありませんか?結局のところ、プログラムは最初に実行したときに自動的にそれを行うことができます。

4

2 に答える 2

1

プロジェクトのリソースとしてデータベースファイルを追加します。次に、ファイルを表示したい場合は、バイト配列をファイルに書き出すだけです。

例:

File.WriteAllBytes("destination path", Properties.Resources.YourResourceName);
于 2012-09-01T00:59:31.967 に答える
0

私の知識をスタックユーザーと共有するのが大好きです。このコードを分析して、何かが役立つことがわかります。

システムを使用する;

System.Collections.Genericを使用します。

System.ComponentModelを使用します。

System.Dataを使用します。

System.Drawingを使用します。

System.Linqを使用します。

System.Textを使用します。

System.Windows.Formsを使用します。

System.Data.SqlServerCeを使用します。

System.IOを使用します。

namespace localdatabaseconnect

{{

public partial class Form1 : Form

{
    public Form1()
    {
        InitializeComponent();
    }
    string conString = Properties.Settings.Default.locallyConnectionString;
    private void button1_Click(object sender, EventArgs e)
    {


        // Open the connection using the connection string.
        using (SqlCeConnection con = new SqlCeConnection(conString))
        {
            con.Open();

            // Insert into the SqlCe table. ExecuteNonQuery is best for inserts.
            int id = int.Parse(textBox1.Text);
            string nom = textBox2.Text;
            string prenom = textBox3.Text;
            using (SqlCeCommand com = new SqlCeCommand("INSERT INTO testme (id,nom,prenom) VALUES(@id,@nom,@prenom)", con))
            {
                com.Parameters.AddWithValue("@id", id);
                com.Parameters.AddWithValue("@nom", nom);
                com.Parameters.AddWithValue("@prenom", prenom);
                com.ExecuteNonQuery();
            }
            con.Close();
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        using (SqlCeConnection con = new SqlCeConnection(conString))
        {
            con.Open();
            // Read in all values in the table.
            using (SqlCeCommand com = new SqlCeCommand("SELECT * FROM testme", con))
            {
                SqlCeDataReader reader = com.ExecuteReader();
                while (reader.Read())
                {
                    string num = reader[0].ToString();
                    MessageBox.Show("hi"+num);
                }
            }
            con.Close();
        }
    }

    private void button3_Click(object sender, EventArgs e)
    {

        string path = "c:\\ChekatyResources";
     try{

      if (!Directory.Exists(path))
        {

      // Try to create the directory.
          DirectoryInfo di = Directory.CreateDirectory(path);
         MessageBox.Show("file is created");
         }
       else {

          MessageBox.Show("file is exist");

          }
          }
            catch (IOException ioex)
           {
  MessageBox.Show(ioex.Message);
           }

       }

    private void Form1_Load(object sender, EventArgs e)
    {
        //string executable = System.Reflection.Assembly.GetExecutingAssembly().Location;

        //string path = (System.IO.Path.GetDirectoryName(executable));
        //MessageBox.Show(path);
        //File.WriteAllBytes("destination path",);
        string paths = "c:\\";
        AppDomain.CurrentDomain.SetData("DataDirectory", paths);

        string connStr = @"Data Source =c:\ChekatyResources\locally.sdf;";

        if (!File.Exists(@"c:\ChekatyResources\locally.sdf"))
        {

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

            SqlCeConnection conn = null;


            try
            {
                conn = new SqlCeConnection(connStr);
                conn.Open();

                SqlCeCommand cmd = conn.CreateCommand();
                cmd.CommandText = "CREATE TABLE testme(id int, prenom ntext,nom ntext)";
                cmd.ExecuteNonQuery();
            }
            catch
            {

            }
            finally
            {
                conn.Close();
            }
        }
        else { MessageBox.Show("it's exist"); }
    }
}

}

于 2014-11-06T22:12:26.340 に答える