1

我创建了一个 Windows 窗体应用程序,它应该将新记录添加到数据库中。现在,它成功添加它并且可以使用新数据......但是当我关闭应用程序并重新启动它时,应用程序就像没有任何改变一样。

数据库是在 SQL Server 中创建的,应用程序使用.mdf它生成的文件。

这是方法:

private void btnUnos_Click(object sender, EventArgs e)
{
            //create an instance of the row to be inserted
            PIScarinaDataSet.OsobaRow novaOsoba;
            novaOsoba = pIScarinaDataSet.Osoba.NewOsobaRow();

            //fill the attributes
            novaOsoba.Ime = txtImeOsobe.Text;
            novaOsoba.Drzavnost = dobijDrzavu();
            novaOsoba.Predstavlja = dobijPredstavnika();

            //insert into the database
            this.Validate();
            this.pIScarinaDataSet.Osoba.Rows.Add(novaOsoba);
            this.osobaTableAdapter1.Update(this.pIScarinaDataSet.Osoba);
            this.osobaBindingSource1.EndEdit();
}
4

2 回答 2

2

既然这对你有帮助,我会回答:

[S]由于您使用的是由 SQL Server 创建的 .MDF,因此您需要确保在 Visual Studio 中将文件上的“复制到输出目录”属性设置为“如果较新则复制”。(或者,如果您要手动将其放在正确的目录中,则“不要复制”。)也就是说,如果您实际上是在保存数据,这就是问题所在。

于 2013-07-10T16:20:09.590 回答
1

您没有向我们展示关键部分 - 应用程序的连接字符串- 但我猜它会包含类似AttachDbFileName=yourdatabase.mdf某处的东西。

整个User Instance 和 AttachDbFileName=方法是有缺陷的 - 充其量!在 Visual Studio 中运行您的应用程序时,它将围绕.mdf文件进行复制(从您的App_Data目录到输出目录 - 通常.\bin\debug是您的应用程序运行的位置)并且很可能,您的INSERT工作正常 - 但您只是在查看错误的.mdf文件到底!

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

我认为真正的解决方案是

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

  2. 安装 SQL Server Management Studio Express

  3. 在SSMS Express中创建您的数据库,给它一个逻辑名称(例如MyDatabase

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

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

    其他一切都和以前完全一样......

于 2013-07-10T05:00:28.473 回答