J'essaye d'append ma table CustId (key primaire) des clients dans CustID (key étrangère) de CustomerAddress Table. Mais je suis incapable d'append la key étrangère automatiquement. que devrais-je faire. Voici mon schéma (je l'ai copié depuis mon instance SQL Server)
CREATE TABLE [dbo].[Customers] ( [CustId] INT IDENTITY (1, 1) NOT NULL, [FirstName] NVARCHAR (50) NOT NULL, [MiddleName] NVARCHAR (50) NULL, [LastName] NVARCHAR (50) NOT NULL, [Salutation] NVARCHAR (10) NULL, [Position] NVARCHAR (50) NULL, [OrganizationType] NVARCHAR (50) NULL, [PhoneNumber] NVARCHAR (50) NOT NULL, [Ext] NCHAR (10) NULL, [FaxNumber] NVARCHAR (50) NULL, [CellNumber] NVARCHAR (50) NULL, [EmailAddress] NVARCHAR (50) NOT NULL, [EmailPermission] NCHAR (10) NOT NULL, [Password] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([CustId] ASC) ); CREATE TABLE [dbo].[CustomerAddress] ( [AddressID] INT NOT NULL IDENTITY (1, 1), [CustID] INT, [OrganizationName] NVARCHAR (50) NOT NULL, [Division] NVARCHAR (50) NULL, [Department] NVARCHAR (50) NOT NULL, [BuildingRoom] NVARCHAR (50) NULL, [Street] NVARCHAR (50) NULL, [City] NVARCHAR (50) NULL, [POBox] NVARCHAR (50) NULL, [Province] NVARCHAR (50) NULL, [PostalCode] NCHAR (10) NOT NULL, [Country] NVARCHAR (30) NOT NULL, [AddressType] CHAR (10) NOT NULL, PRIMARY KEY CLUSTERED ([AddressID]), CONSTRAINT [FK_CustID] FOREIGN KEY ([CustID]) REFERENCES [dbo].[Customers] ([CustId]) );
Code C # pour l'insertion de données:
public int AddCustomerDeliveryAddress(CustomerAddressBLL NewCustomerDeliveryAddressBLL) { ssortingng sql = ssortingng.Format(@"Insert into CustomerAddress (OrganizationName,Division,Department,BuildingRoom,Street,City,POBox,Province,PostalCode,Country,AddressType) Values(@OrganizationName,@Division,@Department,@BuildingRoom,@Street,@City,@POBox,@Province,@PostalCode,@Country,@AddressType)"); db.AddParameter("@OrganizationName", NewCustomerDeliveryAddressBLL.Organization); db.AddParameter("@Division", NewCustomerDeliveryAddressBLL.Division); db.AddParameter("@Department", NewCustomerDeliveryAddressBLL.Department); db.AddParameter("@BuildingRoom", NewCustomerDeliveryAddressBLL.BuildingRoom); db.AddParameter("@Street", NewCustomerDeliveryAddressBLL.Street); db.AddParameter("@City", NewCustomerDeliveryAddressBLL.City); db.AddParameter("@POBox", NewCustomerDeliveryAddressBLL.PoBox); db.AddParameter("@Province", NewCustomerDeliveryAddressBLL.Province); db.AddParameter("@PostalCode", NewCustomerDeliveryAddressBLL.PostalCode); db.AddParameter("@Country", NewCustomerDeliveryAddressBLL.Country); db.AddParameter("@AddressType", NewCustomerDeliveryAddressBLL.AddressType); return db.ExecuteNonQuery(sql); }
Si vous le faites en T-SQL "pur", vous devez utiliser du code comme ceci:
-- declare variable for your identity DECLARE @NewCustId INT; -- insert into your Customers table INSERT INTO dbo.Customers([FirstName], [MiddleName], [LastName], ......) VALUES ('John', 'Robert', 'Doe', ........); -- get the newly inserted Identity value SET @NewCustId = SCOPE_IDENTITY(); -- insert into CustomerAddress table INSERT INTO dbo.CustomerAddress ([CustID], [OrganizationName], [Division], ......) VALUES(@NewCustId, 'Orgname', 'Division', .....)
Mise à jour: OK, c'est le code C # – vous devez le changer pour inclure SELECT SCOPE_IDENTITY()
à la fin:
ssortingng sql = ssortingng.Format(@"INSERT INTO dbo.CustomerAddress (OrganizationName, Division, Department, BuildingRoom, Street, City, POBox, Province, PostalCode, Country, AddressType) VALUES (@OrganizationName, @Division, @Department, @BuildingRoom, @Street, @City, @POBox, @Province, @PostalCode, @Country, @AddressType); SELECT SCOPE_IDENTITY();");
et l'utilisation de cet appel:
int newCustId = (int)db.ExecuteScalar(sql);
donc vous récupérez maintenant le NewCustID
de votre appel INSERT
– utilisez maintenant cette valeur dans la deuxième insertion, vous devez insert vos données dans CustomerAddress