2012-09-01 2 views
1

У меня есть проект Visual C# 2008. В моем проекте explorer у меня есть база данных SQL CE (файл sdf), поэтому я могу работать с базой данных и набором данных в дизайнере. Во время выполнения файл sdf копируется в выходной каталог. Когда пользователь сохраняет свою собственную базу данных, этот файл sdf копируется в любое имя файла, которое пользователь выбирает, и их набор данных сохраняется в копии. Пока нет проблем.Как скопировать файл с программным обеспечением

Я хотел бы сделать это по-другому, если это возможно. Вместо того, чтобы файл sdf был скопирован при первом запуске программы, я бы хотел настроить его так, чтобы, когда пользователь сохраняет свою базу данных, THEN он копирует файл sdf с использованием имени по своему выбору и сохраняет их набор данных для него ,

Я прочитал способы записать файл как двоичный файл, который работает, но он требует нескольких строк кода, которые просто не нужны. Разве нет способа просто рассказать программе «эй, давай и скопируй этот файл sdf из реальной жизни»? В конце концов, программа может автоматически выполнять это при первом запуске.

+0

Какой язык вы хотите этот сценарий, чтобы быть в и что вы пробовали? –

+0

(Visual) C#, как я уже сказал. Извините, если я не был достаточно ясен. Прямо сейчас, файл установлен только для того, чтобы «копировать всегда». Я пробовал метод, который записывает файл в двоичном потоке, как это было предложено где-то в stackoverflow, который, как мне кажется, сейчас не может найти, но, как я уже сказал, кажется, что он слишком много кода, и я думал, что должно быть простая команда для экспорта файла, так как программа имеет возможность сделать это при первом запуске. Я знаю, что я могу сохранить файл во время разработки и включить его в качестве ресурса для легкого экспорта, но, похоже, лишний раз, чтобы файл был дважды в решении. –

ответ

1

Добавить файл базы данных в качестве ресурса в свой проект. Затем, когда вы хотите, чтобы файл отображался, просто выпишите массив байтов в файл.

Пример:

File.WriteAllBytes("destination path", Properties.Resources.YourResourceName); 
+0

Я знаю, что могу добавить его как ресурс и просто «написать все байты», и я не полностью против этой идеи. Это кажется немного лишним, учитывая, что файл уже находится в проекте, в моем обозревателе решений.И поскольку у меня есть возможность выбрать «copy if newer» или «copy always» (что означает, что программа CAN экспортирует файл оттуда), будет существовать простая одна строка кода, которую вы только что опубликовали. Если я ошибаюсь, ваш метод, вероятно, лучший вариант. –

+0

Метод, который я указываю, означает, что база данных будет внутри самого .exe. Где упомянутые выше опции означают, что вам необходимо отправить ваш .exe с дополнительным файлом (файл базы данных). Альтернативно, можно запрограммировать создание базы данных с использованием определенных классов в зависимости от того, какой тип базы данных вы используете. Трудно дать вам больше информации, не зная, какую базу данных вы используете в настоящее время. Но имейте в виду, что это будет включать воссоздание таблиц/столбцов/свойств каждого столбца и так далее программно. – coolmine

+0

Только что заметил, что в вашем вопросе упоминается база данных, которую вы используете. Взгляните на http://stackoverflow.com/questions/6196274/create-sqlce-database-programatically и http://stackoverflow.com/questions/1487845/create-sql-server-ce-database-file-programmatically – coolmine

0

я люблю, чтобы поделиться своими знаниями с вами стек пользователей вы можете анализировать этот код найти что-то может помочь

с использованием системы;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlServerCe;

using 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"); } 
    } 
} 

}

Смежные вопросы