2010-11-05 27 views
10

Tôi đang cố thêm một hàng mới vào cơ sở dữ liệu của mình. Đây là mã của tôi:Cập nhật yêu cầu một InsertCommand hợp lệ khi thông qua bộ sưu tập DataRow với các hàng mới

DS1 là Dataset của tôi, DA1 là tôi data adapter

 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"); 

tại da1.update(ds1,"localitati"); chương trình dừng lại và mang lại cho tôi những lỗi: "Update requires a valid InsertCommand when passed DataRow collection with new rows"

Kết nối với cơ sở dữ liệu hoạt động (tôi đã truy xuất thông tin từ db)

Bất kỳ ý tưởng nào?

Trả lời

6

Bạn phải xác định một InsertCommand cho bạn DataAdapter

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

+1

tôi tôi cũng đã thấy điều này http://csharp.net -informations.com/dataadapter/insertcommand-sqlserver.htm cho bất kỳ ai khác quan tâm – Alex

+1

Không có điểm trong việc sử dụng một DataAdapter trong trường hợp đó. Đó là một ví dụ thuần túy về những gì không đúng. Truy vấn không được giám sát, DataAdapter vô dụng, kết nối không rõ ràng, khởi tạo chuỗi với null - tất cả những thứ không nên tồn tại trong một dự án. – AlexanderMP

7

quesion Giải Quyết; Câu hỏi của bạn:

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"); 

Trả lời:

bạn phải sử dụng CommandBuilder. Đó là trước khi cập nhật bằng cách sử dụng DataAdapter (hoặc trước khi bạn tạo DataRow) Thêm mã:

SqlCommandBuilder cmdb = new SqlCommandBuilder(da); 
7

Đối với DataRows thêm:

SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 

// add rows to dataset 

builder.GetInsertCommand(); 

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

Giải thích:

adapter.Update(dataset) sẽ cố gắng để lưu các thay đổi trong dataset vào cơ sở dữ liệu. Nó sẽ cần:

  1. InsertCommand (nếu DataRows đã được thêm vào)
  2. DeleteCommand (nếu DataRows đã bị xóa)
  3. UpdateCommand (nếu DataRows đã được sửa đổi)

Bạn có thể đặt điểm ngắt để kiểm tra số adapter.InsertCommand của bạn trước số adapter.Update() dòng để xem nếu nó được thiết lập.

Để cài đặt chúng, chỉ cần tạo một SqlCommandBuilder và lửa GetInsertCommand(), GetDeleteCommand() vv

này nên giải quyết các lỗi:

  1. "Cập nhật đòi hỏi một lệnh Cập nhật giá trị khi thông qua bộ sưu tập DataRow với hàng sửa đổi . " Hoặc
  2. "Cập nhật đòi hỏi một Chèn lệnh hợp lệ khi thông qua bộ sưu tập DataRow với hàng mới.", Vv

Xem MSDN Link cho More Info

Các vấn đề liên quan