本地数据库赢得';t显示我通过程序添加的表格

本文关键字:过程 程序 添加 表格 显示 数据库 | 更新日期: 2023-09-27 18:02:51

我将参加c#竞赛,我需要离线处理数据库,它们应该在每台电脑上都能工作,所以如果有人复制我的项目并运行我的程序,一切都会正常工作。

我用Add-NewItem创建了一个本地数据库,并制作了我的数据库。

我的代码

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();
}

我的问题是,在我创建表并关闭程序后,我的新表将不会出现在我的服务器资源管理器中。。为什么?我做错什么了吗?

如果我这样工作,它能在每台电脑上工作吗?

当我创建本地数据库时,我的连接字符串是由visualstudio自动生成的,它是

Data Source=|DataDirectory|'bazalocala.sdf

本地数据库赢得';t显示我通过程序添加的表格

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

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

您可以尝试在BIN''DEBUG文件夹中添加另一个指向数据库的连接,这样您就可以看到您的表。

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

更为复杂的是,SDF文件的特性Copy to output directory。如果此属性设置为Copy Always,则每次启动调试会话时,SDF文件都会从项目文件夹复制到BIN''debug文件夹,从而有效地覆盖文件和在上一次调试会话中所做的更改。您应该将此属性更改为Copy if Newer

你可以试试这个

    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);
    }
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子句中进行了测试,最后我关闭了连接。