添加数据后如何保存数据集

本文关键字:保存 数据集 何保存 数据 添加 | 更新日期: 2023-09-27 18:24:50

是的,我知道这个问题在这里至少被问了5-10次,但我一辈子都无法获得任何保存数据的方法。

其想法是在表Companies的列Name(只有一列)中创建一个值为"asdf"`的新行。

我尝试了以下几种组合:

DatabaseDataSetTableAdapters.CompaniesTableAdapter adapter = new DatabaseDataSetTableAdapters.CompaniesTableAdapter();
DatabaseDataSet ds = new DatabaseDataSet();
adapter.Insert("asdf");
adapter.Fill(ds.Companies);
adapter.Update(ds.Companies);
ds.AcceptChanges();
ds.Companies.AddCompaniesRow("asdf");
ds.Companies.AcceptChanges();
ds.Companies.AddCompaniesRow("asdf");
ds.Companies.Rows[0]["Name"] = "asdf";
adapter.Update(ds.Companies);

我使用的是C#WPF.NET 4.5.1

它确实添加了数据,但在我退出程序时不会保存它——我知道它会添加数据,因为如果我调用这个方法两次,它就会崩溃,因为值不再是唯一的。

这是DatabaseDataSetTableAdapters:

http://pastebin.com/gNsaRFD5

这也不起作用:

        SqlConnection myConnection = new SqlConnection(global::AliBabaMailer.Properties.Settings.Default.DatabaseConnectionString);
        myConnection.Open();
        SqlCommand myCommand = new SqlCommand("INSERT INTO Companies (Name) " +
                                             "Values ('string')", myConnection);
        myCommand.ExecuteNonQuery();
        myConnection.Close();

添加数据后如何保存数据集

好的,所以你的问题是连接字符串:

Properties.Settings.Default.DatabaseConnectionString

此连接字符串的形式为:

“Data Source=ServerName;AttachDbFilename=|DataDirectory|'DataBaseName;Integrated Security=True”

|DataDirectory|通常在这里:

C:'Users'UserName'AppData

当您保存数据时,它将被保存到"|DataDirectory|"位置的数据库文件中,但当您尝试使用服务器资源管理器查看数据时,您正试图从项目文件夹中的数据库文件查看数据,这就是为什么如果您尝试保存数据,然后在运行时查看数据,它会正常工作,因为这样您将查询存储数据的同一数据库。

|DataDirectory|:

|DataDirectory|(包含在管道符号中)是一个替换字符串,指示数据库的路径。它消除了对完整路径进行硬编码的需要,这会导致一些问题,因为数据库的完整路径可以在不同的地方序列化。|DataDirectory|还使共享项目和部署应用程序变得容易。

例如,不使用以下连接字符串:

"Data Source= c:'program files'MyApp'Mydb.sdf"

使用DataDirectory,您可以拥有以下连接字符串:

“Data Source = |DataDirectory|'Mydb.sdf”

要设置DataDirectory属性,请调用AppDomain.SetData方法。如果未设置DataDirectory属性,则将应用以下默认规则来访问数据库文件夹:

  • 对于放在用户计算机上的文件夹中的应用程序,数据库文件夹使用应用程序文件夹。

  • 对于在ClickOnce下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。

链接

编码建议:

试着这样处理你的命令和连接对象:

using(SqlConnection myConnection = new SqlConnection(global::AliBabaMailer.Properties.Settings.Default.DatabaseConnectionString))
using(SqlCommand myCommand = new SqlCommand("INSERT INTO Companies (Name) " + "Values ('string')", myConnection))
{
    myConnection.Open();
    myCommand.ExecuteNonQuery();
    myConnection.Close();
}