2014-09-24 45 views
0

我想用DataAdapter將新記錄插入到DataTable中。 Person表中有2列。名字和姓氏。
我有一個像下面的代碼。無法用C#中的SqlDataAdapter和MSSqlServer插入到數據庫中

SqlConnection connection; 
DataSet dsPerson; 
SqlDataAdapter adapter; 
string connectionString = Properties.Resources.ConnectionString; 
connection = new SqlConnection(connectionString); 

dsPerson = new DataSet("PersonDataSet"); 
adapter = new SqlDataAdapter(); 
SqlCommand selectCommand = new SqlCommand("SELECT * FROM Person", connection); 
adapter.SelectCommand = selectCommand; 
adapter.Fill(dsPerson, "Person"); 

string insertQuery = "INSERT INTO Person(FirstName, LastName) VALUES (@FirstName, @LastName)"; 
SqlCommand insertCommand = new SqlCommand(insertQuery, connection); 

insertCommand.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.NVarChar)); 
insertCommand.Parameters["@FirstName"].SourceVersion = DataRowVersion.Current; 
insertCommand.Parameters["@FirstName"].SourceColumn = "FirstName"; 

insertCommand.Parameters.Add(new SqlParameter("@LastName", SqlDbType.NVarChar)); 
insertCommand.Parameters["@LastName"].SourceVersion = DataRowVersion.Current; 
insertCommand.Parameters["@LastName"].SourceColumn = "LastName"; 

adapter.InsertCommand = insertCommand; 

但是,當我嘗試插入新的記錄到DataSet它出現在DataSet中。但它不會將新記錄插入到DataBase中。
插入代碼如下。

connection.Open(); 
DataRow newRow = dsPerson.Tables["Person"].NewRow(); 
newRow["FirstName"] = "Joseph"; 
newRow["LastName"] = "Sword"; 
dsPerson.Tables["Person"].Rows.Add(newRow); 
dsPerson.Tables["Person"].AcceptChanges(); 
dsPerson.AcceptChanges(); 
adapter.Update(dsPerson, "Person"); 
connection.Close(); 

我甚至嘗試跟蹤查詢發送到SQL Server與Express Profiler。我看到它不會發送插入命令到數據庫。
那麼問題是什麼?如何解決它?
謝謝。

回答

2

您不應該調用AcceptChanges數據集和DataTable的方法,因爲DataAdapter.Update方法隻影響從數據表中更改/添加/刪除的行。

但是在調用AcceptChanges之後,所有的DataRows將有Unchanged狀態。

約DataAdapter的參考參見MSDN

當應用程序調用Update方法時,DataAdapter檢查 RowState屬性,並執行所需要的插入,更新,或 DELETE語句迭代地對於每一行,基於在DataSet中配置的 索引的順序。

相關問題