2014-09-27 21 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

相關問題