Problema en dataset con columnas calculadas

04/08/2008 - 13:25 por Tomas | Informe spam
Hola a todos.

Tengo un problema para actualizar una tabla que contiene una columna
calculada.

Me da el siguiente error: 'Campo_4' no se puede modificar, por ser una
columna calculada.

La base de datos es Sql Server 2000.

La tabla tiene cuatro campos, el primero es la clave "Campo_1", los dos
siguientes son datos y el cuarto es una columna calculada así "Campo_2 *
Campo_3".

// Conector a la base de datos.
SqlDataAdapter sqlDA = new SqlDataAdapter("SELECT * FROM dbo.Tabla",
conexion);
DataSet sqlDS = new DataSet();

// Cargar los datos de la tabla.
sqlDA.Fill(sqlDS, "Tabla");

// Agregar un registro a la tabla.
DataTable dataTable = sqlDS.Tables["Tabla"];
DataRow dr = dataTable.NewRow();
dr["Campo_1"] = 1;
dr["Campo_2"] = 2;
dr["Campo_3"] = 3;
dataTable.Rows.Add(dr);

// Actualizar la tabla.
sqlDA.Update(sqlDS, "Tabla"); < Aquí el ERROR: 'Campo_4' no se puede
modificar, por ser una columna calculada.

¿Alguien me puede ayudar para averiguar la forma de actualizar una tabla que
tenga columnas calculadas?.

Gracias por anticipado.

Tomás.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
05/08/2008 - 12:29 | Informe spam
"Tomas" wrote in message
news:
[...]
sqlDA.Update(sqlDS, "Tabla"); < Aquí el ERROR: 'Campo_4' no se puede
modificar, por ser una columna calculada.

¿Alguien me puede ayudar para averiguar la forma de actualizar una tabla
que tenga columnas calculadas?.



Tendrás que revisar la sentencia de actualización que tienes dentro del
InsertCommand del DataAdapter (sqlDA). Cuando la tabla tiene un campo
calculado, no hay que enviar el valor para ese campo, asi que la sentencia
tendrá que ser algo así:

"Insert into MiTabla(Campo1, Campo2, Campo3) Values (...)" //Obsérvese que
hay que omitir el Campo4 que es calculado.

Si el DataAdapter lo has generado de forma automática mediante el
diseñador visual, tendrás que modificar a mano el texto de la sentencia
generada, que el diseñador lo habrá generado incluyendo el campo4.
Respuesta Responder a este mensaje
#2 Tomas
05/08/2008 - 17:45 | Informe spam
Hola Alberto,

Entonces, por lo que comentas, me sospecho que el problema debe estar en
esta sentencia:
SqlCommandBuilder sqlCB = new SqlCommandBuilder(sqlDA);
Esta sentencia la ejecuto antes de hacer el Update(...).

Intuyo que la construcción que hace SqlCommandBuilder, en vez de ignorar las
columnas calculadas, las utiliza para la actualización.

¿Crees que Microsoft debe tener alguna página en algún sitio que informe de
este problema y la forma de solucionarlo?

Por que yo me imagino, que habrá mucha gente que tenga tablas con columnas
calculadas y ya habrán detectado este problema y quizás Microsoft haya
informado de la solución a la hora de utilizar SqlCommandBuilder con
columnas calculadas



"Alberto Poblacion"
escribió en el mensaje news:
"Tomas" wrote in message
news:
[...]
sqlDA.Update(sqlDS, "Tabla"); < Aquí el ERROR: 'Campo_4' no se puede
modificar, por ser una columna calculada.

¿Alguien me puede ayudar para averiguar la forma de actualizar una tabla
que tenga columnas calculadas?.



Tendrás que revisar la sentencia de actualización que tienes dentro del
InsertCommand del DataAdapter (sqlDA). Cuando la tabla tiene un campo
calculado, no hay que enviar el valor para ese campo, asi que la sentencia
tendrá que ser algo así:

"Insert into MiTabla(Campo1, Campo2, Campo3) Values (...)" //Obsérvese que
hay que omitir el Campo4 que es calculado.

Si el DataAdapter lo has generado de forma automática mediante el
diseñador visual, tendrás que modificar a mano el texto de la sentencia
generada, que el diseñador lo habrá generado incluyendo el campo4.

Respuesta Responder a este mensaje
#3 Alberto Poblacion
06/08/2008 - 13:15 | Informe spam
"Tomas" wrote in message
news:%
Entonces, por lo que comentas, me sospecho que el problema debe estar en
esta sentencia:
SqlCommandBuilder sqlCB = new SqlCommandBuilder(sqlDA);
Esta sentencia la ejecuto antes de hacer el Update(...).

Intuyo que la construcción que hace SqlCommandBuilder, en vez de ignorar
las columnas calculadas, las utiliza para la actualización.

¿Crees que Microsoft debe tener alguna página en algún sitio que informe
de este problema y la forma de solucionarlo?

Por que yo me imagino, que habrá mucha gente que tenga tablas con columnas
calculadas y ya habrán detectado este problema y quizás Microsoft haya
informado de la solución a la hora de utilizar SqlCommandBuilder con
columnas calculadas



Estoy casi seguro de que el SqlCommandBuilder debe estar generando una
sentencia de inserción que inserte todas las columnas, sin tener en cuenta
cuáles son calculadas. Puedes comprobar lo que te ha generado examinando el
valor de sqlDA.InsertCommand.CommandText. Si efectivamente le sobra una
columna, puedes reescribir a mano esa sentencia y volvérsela a asignar al
CommandText.
Respuesta Responder a este mensaje
#4 Carlos
06/08/2008 - 23:47 | Informe spam
¿Crees que Microsoft debe tener alguna página en algún sitio que informe
de este problema y la forma de solucionarlo?

Por que yo me imagino, que habrá mucha gente que tenga tablas con columnas
calculadas y ya habrán detectado este problema y quizás Microsoft haya
informado de la solución a la hora de utilizar SqlCommandBuilder con
columnas calculadas




claro que es asi. Muchos (menos Microsoft :) hemos visto ese problema y
otros que tiene el commandbuilder, por eso preferimos asignar los comandos
directamente en muchos casos y no usar el commandbuilder de .net.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida