Sam*_*Sam 0 .net c# sql-server ado.net
我创建了一个游戏,但我想将用户保存到 SQL Server 数据库。但是一旦我关闭表格,所有记录都会丢失。但是,当我返回到不同的表单并且不关闭应用程序时,我会获得所有记录。
这是我的连接字符串app.config
Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\HighScores.mdf;Integrated Security=True
Run Code Online (Sandbox Code Playgroud)
代码:
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();
Run Code Online (Sandbox Code Playgroud)
整个AttachDbFileName=方法是有缺陷的 - 充其量!在 Visual Studio 中运行您的应用程序时,它将复制文件.mdf(从您的App_Data目录到输出目录 - 通常.\bin\debug- 您的应用程序运行的位置),并且很可能,您的INSERT工作正常 - 但您只是看到了错误的. mdf文件到底!
如果您想坚持使用这种方法,请尝试在调用上放置断点myConnection.Close()- 然后检查.mdf使用 SQL Server Mgmt Studio Express 检查文件 - 我几乎可以肯定您的数据就在那里。
我认为真正的解决方案是
安装 SQL Server Express(如果您尚未安装)
安装 SQL Server Management Studio
在SSMS Express中创建数据库,为其指定一个逻辑名称(例如HighScores)
使用其逻辑数据库名称(在服务器上创建它时给出)连接到它 - 并且不要弄乱物理数据库文件和用户实例。在这种情况下,您的连接字符串将类似于:
Data Source=.\\SQLEXPRESS;Database=HighScores;Integrated Security=True
Run Code Online (Sandbox Code Playgroud)
其他一切都和以前一模一样……
另请参阅 Aaron Bertrand 的优秀博客文章要戒掉的坏习惯:使用 AttachDbFileName了解更多背景信息。