本地数据库不会显示我以编程方式添加的表

时间:2014-05-12 17:49:36

标签: c# sql database local sdf

我将参加c#比赛,我需要离线处理数据库,他们应该在每台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 个答案:

答案 0 :(得分:2)

替换字符串|DataDirectory|将替换为程序运行的目录 在Visual Studio调试会话期间,此目录为BIN \ DEBUG(或x86变体) 因此,您的表将添加到位于BIN \ DEBUG文件夹中的数据库中,而您的服务器资源管理器窗口具有指向位于项目文件夹中的数据库的连接。

您可以尝试在BIN \ DEBUG文件夹中添加指向数据库的另一个连接,您将能够看到您的表。

如果你在VS之外运行你的程序,那么你没有这个问题。

为了进一步复杂化,SDF文件的属性为Copy to output directory。如果此属性设置为Copy Always,那么每次启动调试会话时,SDF文件都会从项目文件夹复制到BIN \ DEBUG文件夹,从而有效地覆盖文件以及您在上一个调试会话中所做的更改。您应该将此属性更改为Copy if Newer

答案 1 :(得分:2)

使用| DataDirectory |时在Visual Studio中编译程序,Visual Studio在Debug文件夹中创建一个与原始数据库不同的临时数据库。这就是为什么添加的表不会显示在那里,而不是| DataDirectory |使用实际地址。

答案 2 :(得分: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);
    }

答案 3 :(得分: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();

我创建了一个连接,并为它提供了数据库的完整位置,而不是bin / debug中的连接。然后我打开连接并写了字符串x以将数据保存在我的数据库中。我创建了一个新的命令,我在try-catch子句中测试,最后我关闭了连接。