VS2005 / VS2008 DataSet Designer, inserte una fila en una tabla que tenga una columna guid generada automáticamente

StackOverflow https://stackoverflow.com/questions/806590

Pregunta

Tengo un DataTable de tipo muy fuerte creado con el diseñador de DataSet VS2005 / VS2008.

La tabla tiene una columna de clave principal que es una guía, que se llena con el servidor SQL. El problema es cuando quiero agregar una fila (o varias filas) a mi DataTable y luego llamar a DataAdapter.Update (pasando el DataTable). Cuando se llama DataAdapter.Update , obtengo una excepción de SQL que dice que no se puede insertar NULL en la columna de clave principal.

¿Cómo le digo al diseñador que esta es una columna generada automáticamente y no deseo proporcionar un valor para las nuevas filas? Solo quiero el valor generado por SQL.

¿Me estoy perdiendo algo aquí o es una limitación del diseñador DataSet?

Sé cómo lograr esto utilizando LINQ to SQL, pero desafortunadamente no lo tengo a mi disposición para este proyecto.

¿Fue útil?

Solución

Posiblemente uno de estos:

  • Si no necesita la columna en su DataSet para su aplicación, entonces elimínela.
  • Si desea la columna pero no le importa darle un valor, entonces cámbiela para permitir DBNull.
  • Siempre puede desactivar la aplicación de restricciones (probablemente una mala idea): DataSet.EnforceConstraints = false
  • Puede llenar la columna con una clave sustituta que no se envía a la base de datos.

Para las dos primeras opciones, si desea la comodidad de permitir que el diseñador mantenga su estructura sincronizada con su base de datos, entonces puede eliminar la columna o permitir la nula mediante programación, tal vez justo al lado de " // HACK: " ; comentario explicando por qué.

Otros consejos

Probablemente esté usando DEFAULT NEWID () en su definición de tabla de SQL Server, por lo que el problema puede ser que el diseñador del conjunto de datos no vea esta columna como generada automáticamente.

¿Tal vez generar guid en el código de tu aplicación podría ser una solución? De lo contrario, puede establecer el valor predeterminado en su conjunto de datos, pero es probable que también tenga que cambiar las instrucciones de inserción / actualización del adaptador de datos para que este valor predeterminado no se inserte en la tabla del servidor Sql.

También podría haber alguna otra solución de la que no tenga conocimiento ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top