Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序停止Visual Studio C后,数据库将不保留数据#_C#_Database_Visual Studio - Fatal编程技术网

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();