2010-11-05 8 views
10

Estoy intentando agregar una nueva fila a mi base de datos. Aquí está mi código:La actualización requiere un InsertCommand válido cuando se pasa la colección DataRow con filas nuevas

DS1 es mi conjunto de datos, DA1 es mi adaptador de datos

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

en el da1.update(ds1,"localitati"); el programa se detiene y me da el error: "Update requires a valid InsertCommand when passed DataRow collection with new rows."

La conexión a la base de datos funciona (he recuperados información de la BD)

¿Alguna idea?

Respuesta

6

debe definir una InsertCommand para usted DataAdapter

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

+1

También he encontrado este http://csharp.net -informations.com/dataadapter/insertcommand-sqlserver.htm para cualquiera que esté interesado – Alex

+1

No tiene sentido usar un DataAdapter en ese caso. Es un puro ejemplo de lo que no está bien hacer. Consulta sin parametrizar, DataAdapter inútil, conexión no cerrada, inicialización de cadena con nulo, todas las cosas que no deberían existir en un proyecto. – AlexanderMP

7

quesion Resuelto; Su pregunta:

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

Respuesta:

debe utilizar CommandBuilder. Es decir, antes de su actualización a través de adaptador de datos (o antes de la creación de DataRow) Agregue el código:

SqlCommandBuilder cmdb = new SqlCommandBuilder(da); 
7

Para DataRows añadiendo:

SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 

// add rows to dataset 

builder.GetInsertCommand(); 

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

Explicación:

adapter.Update(dataset) tratará de guardar los cambios en las dataset a la base de datos. Se necesitará:

  1. InsertCommand (si se añadieron DataRows)
  2. DeleteCommand (si DataRows se suprimieron)
  3. UpdateCommand (si DataRows fueron modificados)

Usted puede poner un punto de interrupción para inspeccionar su adapter.InsertCommand antes del adapter.Update() línea para ver si está configurado.

Para configurar ellos, basta con crear un incendio y SqlCommandBuilderGetInsertCommand(), GetDeleteCommand(), etc.

Esto debería resolver los errores:

  1. "actualización requiere un comando de actualización válida cuando pasa colección DataRow con filas modificadas " O
  2. "actualización requiere un comando Insertar válida cuando se pasa colección DataRow con filas nuevas.", Etc.

Ver MSDN Link para Más Información

Cuestiones relacionadas