InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
Simular TRUNC en SQL Server
SQL to LINQ
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008
SQL Server 2008
TransactionScope - Simplificando el trabajo con transacciones.
LinQ To SQL - Un ejemplo sencillo
Formatear números en SQL Server
Leer un campo XML de SQL Server 2005 con C#
Métodos Extensores: INNER JOIN
LINQ con métodos Extensores y expresiones lambda


SET IDENTITY_INSERT ON y LinqToSQL

Recientemente he tenido que realizar un pequeño programa para migrar datos. Leia de una base de datos y grababa en otra, ambas SQL Server 2000.

Me decidí a usar VS 2008 y LinqToSQL por la rapidez en el desarrollo. No podía usar Integration Services ni DTS (o al menos no me parecio practico), ya que entre otras cosas tenia que crear y tratar documentos.

El caso es que a la hora de realizar inserciones en la tabla de destino, la clave primaria estaba definida como identity - pero necesitaba insertar los mismos valores en ambas bases de datos - y me encontraba con el siguiente error.

Explicit value must be specified for identity column in table 'DatosIdentity' when IDENTITY_INSERT is set to ON.

La solucion es sencilla, pero seguro que a mas de uno le ahorro un dolor de cabeza. Sencillamente debemos habilitar la inserción en los campos de identidad a través de la instruccion SET IDENTITY_INSERT. Pero al estar utilizando Linq To SQL la cosa cambia entre SQL Server 2005 y SQL 2000. Mientras que SQL Server 2005 todo funciona bien a la primera, en SQL Server 2000 se produce el error anterior.

Vamos a crear un tabla con un campo identity y un proyecto con Visual Studio 2008 en el que grabamos datos en dicha tabla.

Primero creamos la tabla sobre SQL Server 2005.

 

CREATE TABLE DatosIdentity

(

Id int IDENTITY NOT NULL,

Dato varchar(50) NULL,

Fecha datetime NULL

CONSTRAINT PK_DatosIdentity PRIMARY KEY (Id)

)

En nuestro proyecto de VS 2008 añadimos un formulario y modelo de datos de LinqToSQLClasses (ver como) conectado a SQL Server 2005.

En el formulario programos un botón de la siguiente manera:

 

using (DataClasses1DataContext ctx = new DataClasses1DataContext())

{

ctx.ExecuteCommand("SET IDENTITY_INSERT DatosIdentity ON");

DatosIdentity datos = new DatosIdentity();

datos.Id = 1;

datos.Dato = "Devjoker.com";

datos.Fecha = DateTime.Now;

ctx.DatosIdentities.InsertOnSubmit(datos);

ctx.SubmitChanges();

ctx.ExecuteCommand("SET IDENTITY_INSERT DatosIdentity OFF");

}

En SQL Server 2005 funcionara bien, pero si cambiamos la cadena de conexion y empezamos a trabajar con con SQL Server 2000 obtendremos el sguiente error:

Explicit value must be specified for identity column in table 'DatosIdentity' when IDENTITY_INSERT is set to ON.

La solucion es cambiar los decoradores de la propieda identity y cambiar el atributo IsDbGenerated=false.

 

[Column(Storage="_Id", AutoSync=AutoSync.OnInsert,
DbType=
"Int NOT NULL IDENTITY",
IsPrimaryKey=
true,
IsDbGenerated=false)]

public int Id

{

get

{

return this._Id;

}

set

{

if ((this._Id != value))

{

this.OnIdChanging(value);

this.SendPropertyChanging();

this._Id = value;

this.SendPropertyChanged("Id");

this.OnIdChanged();

}

}

}

Con esto funcionará.

El porque no lo sé, cosas que tienen las nuevas tecnologías.

Saludos, DJK


 Versión para imprimir  Foros de consulta

 
Miedo me da por Aldeamedia
Respuesta recibida el [16/10/2008 05:51:04]
Yo que me he pegado con las Web Service Extensions para ver como no son compatibles con Visual Studio 2008 miedo me da a mi hacer cosas en producción con LINQ o Silverlight aunque reconozco su potencia

 
jarl por espinete
Respuesta recibida el [28/10/2008 10:24:43]
Algun proyecto de ejemplo VS 2008 + LINQ al estilo de MSDN Video ?? gracias

 
qué significa IsDbGenerated=false por espinete
Respuesta recibida el [28/10/2008 10:32:22]
Señor, qué significa IsDbGenerated=false?

gracias

 
creo que.. por dokko
Respuesta recibida el [19/11/2008 08:49:08]
IsDbgenerated=false, significa que el ID no sera autogenerado.

Me imagino que el problema se debio a que la base de datos no tenia el ID como autogenerado y el DBML si lo tenia.....


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



 Versión para imprimir

SET IDENTITY_INSERT ON y LinqToSQL
Autor: Pedro Herrarte Sánchez
Visitas: 3263 Fecha de publicación: 14/10/2008
Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




Visitas: 111 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 811 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 767 | Comentarios: 3 | Archivo: Articulos
Visitas: 3183 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14571 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1499 | Comentarios: 3 | Archivo: Articulos
Visitas: 697 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2034 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
certificado de pensiones del bbva horizonte por danger ... [Actualidad] 127 12/01/2010
certificacion cesantias porvenir por martha perez ... [Actualidad] 6 04/03/2010
Solicitud certificado de afiliaciones a pensiones y cesantias proteccion por hz ... [Actualidad] 60 10/02/2010
cerificado fondo horizonte de pensiones y cesantias por carlos fideligno torres herrera ... [Actualidad] 148 18/01/2010
certificado de afiliacion por EDDY ... [Actualidad] 0 14/03/2010
Cursores por nopodes ... [ORACLE] 0 14/03/2010
peticion urgente mi nombre es juan pablo osorio cardona cc 71115218 por juancho ... [Actualidad] 0 14/03/2010
peticion por juancho ... [Actualidad] 0 14/03/2010
estrato de pencion por carlos antonio mateus gomez ... [Actualidad] 0 14/03/2010
quiero aprender c# por alcapego ... [C#] 4 16/02/2008
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 140 26/01/2010
certificado de penciones y cesantias por fredy ... [Actualidad] 2 29/01/2010

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
01/08/2007 Actualizar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
12/01/2006 Introducción a PLSQL    forma parte de...Tutorial PL/SQL
27/10/2006 Eventos    forma parte de...Tutorial C#
29/12/2007 Cómo colocar el foco (cursor) en un control en ASP.net
21/07/2007 Insertar datos en Transact SQL    forma parte de...Tutorial de Transact SQL
29/05/2006 J2EE Y .NET: LA RIVALIDAD PERMANENTE
22/02/2008 Cómo consumir un Servicio WCF en vez de un Web Service
06/04/2009 Como modificar el web.config sin reiniciar la aplicacion ASP.NET
10/10/2006 Como conectar a ORACLE con Java

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]