插入新值后,数据不会显示在服务器资源管理器数据库中

时间:2016-03-01 20:46:32

标签: c# sql-server database

我使用以下代码创建了一个备用表单:

private void btnBackUp_Click(object sender, EventArgs e)            //Backup will work only when we place |DataDirectory| in our appconfig file
{
        try
        {
            progressBar1.Visible = true;
            progressBar1.Value = 15;
            bool bBackUpStatus = true;

            Cursor.Current = Cursors.WaitCursor;

            if (Directory.Exists(@"D:\Backup_MAConvent"))
            {
                if (File.Exists(@"D:\Backup_MAConvent\MAConvent_Backup.bak"))
                {
                    if (MessageBox.Show(@"Do you want to replace it?", "Back", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        File.Delete(@"D:\Backup_MAConvent\MAConvent_Backup.bak");
                    }
                    else
                        bBackUpStatus = false;
                }
            }
            else
                Directory.CreateDirectory(@"D:\Backup_MAConvent");

            if (bBackUpStatus)
            {
                con.Open();

                progressBar1.Value = 25;

                string path1 = System.IO.Path.GetFullPath(@"SchoolDatabase.mdf");

                SqlCommand cmd2 = new SqlCommand("backup database [" + path1 + @"] to disk ='D:\Backup_MAConvent\MAConvent_Backup.bak' with init,stats=10", con);
                cmd2.ExecuteNonQuery();

                progressBar1.Value = 35;
                con.Close();

                timer1.Start();

                MessageBox.Show("Backup of the Database saved Successfully", "Back", MessageBoxButtons.OK, MessageBoxIcon.Information);
                timer1.Stop();
                progressBar1.Value = 10;
                progressBar1.Visible = false;
            }
        }
        catch
        {
            MessageBox.Show(@"Backup Error, Please close the software & restart and then try again to backup", "Backup", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }

此代码未使用\bin数据库的连接字符串。因此,我将app.config中的连接字符串更改为|DataDirectory|

<connectionStrings>
    <add name="SchoolManagement.Properties.Settings.SchoolDatabaseConnectionString"
         connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SchoolDatabase.mdf;Integrated Security=True;User Instance=True"
         providerName="System.Data.SqlClient" />
</connectionStrings>

之后,当我向数据库中插入新值时,这些值会在我的搜索表单中临时显示,并显示搜索查询。但是在停止调试之后,数据不在数据库中。

然后我将Copy To output directory更改为copy if newer。所以,现在数据每次都在表单的搜索网格视图中显示,但它没有显示在服务器资源管理器的数据库中(显示表数据)。

我知道由于|Data directory|数据库和\ bin数据库而发生此问题。请建议做什么?如果我将连接字符串更改为\ bin数据库,一切正常,但备份代码不起作用。如果有人知道解决这个问题的方法,请帮忙。谢谢

1 个答案:

答案 0 :(得分:0)

整个用户实例和AttachDbFileName = 方法存在缺陷 - 充其量!在Visual Studio中运行应用程序时,它将复制.mdf文件(从App_Data目录到输出目录 - 通常是.\bin\debug - 应用程序运行的地方)和最有可能,您的INSERT工作正常 - 但您最后只是查看错误的.mdf文件

如果你想坚持这种方法,那么尝试在myConnection.Close()调用上设置一个断点 - 然后用SQL Server Mgmt Studio Express检查.mdf文件 - 我几乎可以肯定你的数据在那里。

我认为真正的解决方案将是

  1. 安装SQL Server Express(你已经完成了)

  2. 安装SQL Server Management Studio Express

  3. SSMS Express 中创建数据库,为其指定一个逻辑名称(例如SchoolDatabase

  4. 使用其逻辑数据库名称(在服务器上创建时给定)连接到它 - 并且不要乱用物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:

    Data Source=.\\SQLEXPRESS;Database=SchoolDatabase;Integrated Security=True
    

    其他所有内容都完全与以前相同......

  5. 另请参阅Aaron Bertrand的优秀博客文章Bad habits to kick: using AttachDbFileName以获取更多背景信息。