2014-09-27 46 views
0

是的,我知道这个问题在这里至少要求5-10次,但我不能为我的生活获得任何保存数据的方法。如何在添加数据后保存DataSet?

这个想法是在表CompaniesName(只有一列)中创建一个新的行,其值为“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#.NET WPF 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(); 
+0

过得好连接字符串? – 2014-09-27 14:07:07

+0

@SyedFarjadZiaZaidi,你的意思是'SqlConnection'?我没有使用它,但由于数据已成功添加到数据库中,我认为它应该能够保存。 – 2014-09-27 14:08:45

+0

不,我的意思是你传递给你的数据适配器的连接字符串...在这里发布连接字符串 – 2014-09-27 14:11:07

回答

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

谢谢!如果有人想知道我在'this._connection = new global :: System.Data.SqlClient.SqlConnection();'之前放了'System.AppDomain.CurrentDomain.SetData(“DataDirectory”,“”);'并且它工作正常。 – 2014-09-27 15:07:49