InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
También puedes ver ...
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
Métodos Extensores: SELECT
Insertar en una Tabla usando Linq2SQL (Linq To SQL)
Primeros pasos con Linq2SQL (Linq To SQL)

Afiliados
La Web del programador
MundoProgramacion


 

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


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: 429 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: 303 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET|CSS|ASP.NET
Visitas: 137 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS
Visitas: 101 | Comentarios: 5 | Archivo: Articulos
Categorias: TFS
Visitas: 429 | Comentarios: 4 | Archivo: Articulos
Categorias: Transact-SQL|LinQ
Visitas: 1448 | Comentarios: 6 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|ADO.NET
27/09/2008 Navegando ....
Visitas: 238 | Comentarios: 0 | Archivo: Articulos
Categorias: Humor
Visitas: 611 | Comentarios: 0 | Archivo: Articulos
Categorias: Visual Basic .NET|C#|ASP.NET|ASP.NET|Programación|WCF
Visitas: 2573 | Comentarios: 4 | Archivo: Articulos
Categorias: C#
Visitas: 463 | Comentarios: 0 | Archivo: Articulos
Categorias: JavaScript|ASP.NET
Visitas: 1072 | Comentarios: 0 | Archivo: Articulos
Categorias: Windows XP|Linux|Windows Vista

Útimos temas recibidos en los foros ...
Crystal reports XI Release 2 y asp.net por mvargas ... [ASP.NET] 0 21/11/2008
Enviar un email con C# utilizando .Net FrameWork 2.0 con logo... por Moises ... [ASP.NET] 0 21/11/2008
Enviar un email con C# utilizando .Net FrameWork 2.0 por Moises ... [C#] 0 21/11/2008
Cuestión de BFILE. por Megatron ... [ORACLE] 0 21/11/2008
Enviar email por Dol ... [ASP.NET] 5 21/08/2007
*******PREGUNTA********: por T.S.U.En Informatíca ... [Visual Basic 6.0] 5 17/03/2008
Programar tareas en oracle. por Rodrigo ... [ORACLE] 0 21/11/2008
fechas con datatimepicker por peyin ... [Visual Basic .NET] 3 20/11/2008
agregar datos de un gridview a un textbox por jhors ... [ASP.NET] 3 19/09/2007
Select de sql en c# por Stuart ... [C#] 1 20/11/2008
Manual en Español de SQL Navigator for Oracle por Maira ... [ORACLE] 12 30/03/2008
Como mandar mensaje a Celular por Pako ... [C#] 40 13/03/2007

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 ...
06/11/2007 Cursores en Transact SQL    forma parte de...Tutorial de Transact SQL
12/01/2006 Introducción a PLSQL    forma parte de...Tutorial PL/SQL
03/10/2006 Estrcuturas de control.    forma parte de...Tutorial C#
19/10/2005 Configurar el IIS para ejecutar aplicaciones ASP.net
14/07/2006 Tablas PL/SQL    forma parte de...Tutorial PL/SQL
03/10/2006 Polimorfismo    forma parte de...Tutorial C#
11/07/2007 Aplicando formato de fecha y número a una variable.
22/10/2005 Consultar datos. SELECT    forma parte de...Tutorial SQL
27/08/2007 Enviar email con C#
14/07/2006 Registros PL/SQL    forma parte de...Tutorial PL/SQL

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]