C# 应用程序停止Visual Studio C后,数据库将不保留数据#
希望有人能帮上忙。下面的代码用于向表中添加条目;但是,当数据在运行时添加时,当应用程序关闭时,数据将消失。数据库设置为“更新时复制”C# 应用程序停止Visual Studio C后,数据库将不保留数据#,c#,database,visual-studio,C#,Database,Visual Studio,希望有人能帮上忙。下面的代码用于向表中添加条目;但是,当数据在运行时添加时,当应用程序关闭时,数据将消失。数据库设置为“更新时复制” private void AddToNameList() { SqlConnection con = new SqlConnection(connectionString); cmd = new SqlCommand("INSERT INTO NameSurname VALUES (
private void AddToNameList()
{
SqlConnection con = new SqlConnection(connectionString);
cmd = new SqlCommand("INSERT INTO NameSurname VALUES (@NameId, @Surname)", con);
cmd.Parameters.AddWithValue("@NameId", textBox2.Text);
cmd.Parameters.AddWithValue("@Surname", textBox3.Text);
con.Open();
int i= cmd.ExecuteNonQuery();
con.Close();
if (i != 0)
{
MessageBox.Show(i + "Data Saved");
}
textBox2.Clear();
textBox3.Clear();
}
private void button1_Click(object sender, EventArgs e)
{
if(textBox2.Text!= ("") && textBox3.Text!=(""))
{
AddToNameList();
}
else
{
MessageBox.Show("Please enter Name and Surname","Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
消息框确认数据已保存,当我执行搜索时,数据已保存。但是,当我停止应用程序运行并检查数据库时,数据不在那里
谢谢你的帮助
谢谢如果要读取.mdf文件,必须安装
SQL Server Express
或SqlLocalDb runtime
。并非所有其他用户都愿意下载并安装它们
为了将表保存到数据库,我认为SQLite将是一个更好的选择
希望以下步骤能对您有所帮助
首先,使用NuGet安装System.Data.SQLite
其次,在App.config中配置连接字符串
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<connectionStrings>
<add name="SQLiteDbContext" connectionString="Data Source=MyDatabase.sqlite" providerName="System.Data.SQLite.EF6" />
</connectionStrings>
</configuration>
您在应用程序的每个构建上都覆盖了您的数据库文件(我假设是Sql Express或类似的东西)?看起来这就是正在发生的事情,但我不知道为什么。我正在使用VisualStudio“数据库设置为‘更新时复制’”。不要这样做。请将数据库文件远离bin目录,或者不要覆盖它。我的理解是,*mdf文件上的“如果较新,则复制”设置确保对数据库或文件的更改在构建之间保持不变“不复制”无效。连接字符串中是否有AttachDbFilename?顺便说一句,您应该使用
处理连接和命令,非常感谢您的输入。我已经试过了,但我仍然不明白为什么Visual Studio 2019允许我在本地数据库中创建一个表,在应用程序运行时对其进行添加(即使我重新启动应用程序,它们现在仍会保留),但当我单击show table时,我看不到对表的添加。我只能看到在测试查询时手动输入的添加内容。有什么想法吗?
// create
SQLiteConnection.CreateFile("MyDatabase.sqlite");
SQLiteConnection con = new SQLiteConnection("Data Source=MyDatabase.sqlite");
con.Open();
string sql = "create table NameSurname (Nameid varchar(20), Surname varchar(20))";
SQLiteCommand command = new SQLiteCommand(sql, con);
command.ExecuteNonQuery();
// insert
SQLiteCommand cmd = new SQLiteCommand("INSERT INTO NameSurname VALUES (@NameId, @Surname)", con);
cmd.Parameters.AddWithValue("@NameId", textBox2.Text);
cmd.Parameters.AddWithValue("@Surname", textBox3.Text);
cmd.ExecuteNonQuery();
// read
SQLiteCommand sqlCom = new SQLiteCommand("Select * From NameSurname", con);
SQLiteDataReader sqlDataReader = sqlCom.ExecuteReader();
int i = 1;
while (sqlDataReader.Read())
{
listBox1.Items.Add(i);
listBox1.Items.Add(sqlDataReader.GetValue(0));
listBox1.Items.Add(sqlDataReader.GetValue(1));
i++;
}
con.Close();