2010-11-05 48 views
10

我想向我的數據庫添加一個新行。這裏是我的代碼:當用新行傳遞DataRow集合時,更新需要一個有效的InsertCommand

DS1是我的數據集,DA1是我的數據適配器

 dRow = ds1.Tables["localitati"].NewRow(); 
     dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower(); 
     dRow[2] = aux2.ToLower().Replace(" ", ""); 
     dRow[3] = aux1; 
     dRow[4] = e.X; 
     dRow[5] = e.Y; 
     ds1.Tables["localitati"].Rows.Add(dRow); 

     da1.Update(ds1, "localitati"); 

da1.update(ds1,"localitati");程序停止,並給我的錯誤:「Update requires a valid InsertCommand when passed DataRow collection with new rows。」

到(我從數據庫中檢索信息)的數據庫作品

任何想法的連接?

回答

6

,必須定義一個InsertCommand你的DataAdapter

http://www.codeproject.com/KB/database/relationaladonet.aspx

+1

我還發現這http://csharp.net -informations.com/dataadapter/insertcommand-sqlserver。htm對於任何感興趣的人 – Alex 2010-11-05 12:13:52

+1

在這種情況下使用DataAdapter沒有意義。這是一個不正確的例子。未參數化的查詢,無用的DataAdapter,未關閉的連接,使用null的字符串初始化 - 項目中不應存在的所有內容。 – AlexanderMP 2010-11-05 13:21:07

7

Quesion解決;你的問題:

dRow = ds1.Tables["localitati"].NewRow(); 
dRow[1] = aux1.Replace(" ", "").Replace("-", "").ToLower(); 
dRow[2] = aux2.ToLower().Replace(" ", ""); 
dRow[3] = aux1; 
dRow[4] = e.X; 
dRow[5] = e.Y; 
ds1.Tables["localitati"].Rows.Add(dRow); 

da1.Update(ds1, "localitati"); 

答:

必須使用CommandBuilder的。這是使用的DataAdapter(或您創建數據行之前)添加代碼的更新之前:

SqlCommandBuilder cmdb = new SqlCommandBuilder(da); 
7

對於添加的DataRows:

SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 

// add rows to dataset 

builder.GetInsertCommand(); 

//Without the SqlCommandBuilder this line would fail 
adapter.Update(dataSet); 

說明:

adapter.Update(dataset)將嘗試保存更改到數據庫的dataset。這將需要:

  1. 的InsertCommand(如果添加DataRows
  2. 的DeleteCommand(如果DataRows被刪除)
  3. 更新命令(如果DataRows進行了修改)

你可以在之前設置一個斷點來檢查您的線看是否設置。

對其進行設置,只需創建一個SqlCommandBuilder和消防GetInsertCommand()GetDeleteCommand()

這應該解決的錯誤:

  1. 「更新需要一個有效的更新命令時傳遞的DataRow集合與修改的行「。或
  2. 「更新需要一個有效的插入命令時,新的行傳遞的DataRow集合。」等

欲瞭解更多信息,請參見MSDN Link

相關問題