【问题标题】:SQL Server database doesn't save record after closing form C# [duplicate]关闭表单C#后SQL Server数据库不保存记录[重复]
【发布时间】:2018-03-10 20:57:29
【问题描述】:

我创建了一个游戏,但我想将用户保存到 SQL Server 数据库。但是一旦我关闭表格,所有的记录都会丢失。但是当我返回另一个表单并且不关闭应用程序时,我会得到所有记录。

这是我在app.config中的连接字符串

Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\HighScores.mdf;Integrated Security=True

代码:

connectionString = ConfigurationManager.ConnectionStrings["ChickenBlaster.Properties.Settings.user_dataConnectionString"].ConnectionString;

public SqlConnection conn;
string connectionString;

conn = new SqlConnection(connectionString);

conn.Open();

string query = ("INSERT INTO dbo.Highscore (id,naam) VALUES (@id, @sam)");

SqlCommand cmd = new SqlCommand(query, conn);

cmd.Parameters.AddWithValue("@id", id);
cmd.Parameters.AddWithValue("@naam", txtUsername.Text);

cmd.ExecuteNonQuery();

conn.Close();

【问题讨论】:

    标签: c# .net sql-server ado.net


    【解决方案1】:

    整个 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

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

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

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

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

    有关更多背景信息,另请参阅 Aaron Bertrand 的优秀博文 Bad habits to kick: using AttachDbFileName

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多