我有一个Visual C#2008项目。在我的项目资源管理器中,我有一个SQL CE数据库(sdf文件),因此我可以使用设计器中的数据库和数据集。在运行时,sdf文件将复制到输出目录。当用户保存自己的数据库时,此sdf文件将复制到用户选择的任何文件名,并将其数据集保存到副本中。到目前为止没问题。
如果可能的话,我想以不同的方式做这件事。我不想在程序第一次运行时复制出sdf文件,而是设置它以便在用户保存数据库时,然后使用他们选择的名称复制出sdf文件,并将数据集保存到其中
我已经阅读了将文件写为二进制文件的方法,这确实有效,但它需要几行代码,这似乎是不必要的。有没有办法告诉程序“嘿,继续快速复制这个sdf文件”?毕竟,程序能够在您第一次运行时自动执行它。
答案 0 :(得分:1)
将数据库文件添加为项目中的资源。然后,当您希望显示文件时,只需将字节数组写入文件。
示例:
File.WriteAllBytes("destination path", Properties.Resources.YourResourceName);
答案 1 :(得分:0)
我喜欢与您分享我的知识 你可以分析这段代码找到可以帮助的东西
使用System;
使用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"); }
}
}
}