添加数据后如何保存DataSet?

时间:2014-09-27 14:02:57

标签: c# database dataset

是的,我知道这个问题在这里至少要问过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();

1 个答案:

答案 0 :(得分:1)

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

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下运行的应用程序,数据库文件夹使用创建的特定数据文件夹。

Link

编码建议:

尝试像下面那样处理命令和连接对象:

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