Sequencia com os mesmos numeros usando CSHARP e sqlserver 2012
Olá , estou fazendo um Portifólio Utilizando C# e SQLSERVER 2012.
Criei uma BANCO chamado BDCAD com 4 Tables vai ter 2 Relacionamentos entre ORDEM e PRODUTOS
CREATE TABLE TBprouct(
IDPRODUCT INT PRIMARY KEY identity (1,1),
DESCRI VARCHAR(50) NULL,
PRICE DECIMAL(10,2) NOT NULL,
AMOUNT INT NOT NULL,
DATEOUT VARCHAR(10) NULL,
)
CREATE TABLE TBorder(
IDORDER INT PRIMARY KEY identity (1,1),
SO VARCHAR (4) NOT NULL,
ORDERNO INT NOT NULL REFERENCES TBprouct(IDPRODUCT)
)
Já no C# fiz os Forms com os Campos, na minha Lógica vou preencher o PRODUTO e Depois coloca uma ORDER e o ORDERNO vai relacionar com o ID do Produto para que eu possa fazer depois um FORM de SELECT´s até mesmo para Praticar.
mas ai que vem o problema, que dentro do meu Humilde conhecimento não consigo sair deste ponto, quando eu coloco os Inserts no Comando do SQL da certo, mas
quando eu coloco pelo C# da erro pelo que eu Entendi não segue as sequencias corretas pois o ID do Produto é IDENTITY registrando na sequencia 1,2,3...
e o ORDERNO registra de outra forma que não consigo enchergar no C# .
Vi em uns foruns que só pode um IDENTITY por Table tirei o do ID da Order e coloquei no ORDERNO mas sem sucesso.
Tambem criei um campo no C# para gerar o ORDERNO deixei como propriedade READYONLY = TRUE mas tambem sem sucesso.
Se alguem me ajudar vou agradecer muito galera, abraço..
Criei uma BANCO chamado BDCAD com 4 Tables vai ter 2 Relacionamentos entre ORDEM e PRODUTOS
CREATE TABLE TBprouct(
IDPRODUCT INT PRIMARY KEY identity (1,1),
DESCRI VARCHAR(50) NULL,
PRICE DECIMAL(10,2) NOT NULL,
AMOUNT INT NOT NULL,
DATEOUT VARCHAR(10) NULL,
)
CREATE TABLE TBorder(
IDORDER INT PRIMARY KEY identity (1,1),
SO VARCHAR (4) NOT NULL,
ORDERNO INT NOT NULL REFERENCES TBprouct(IDPRODUCT)
)
Já no C# fiz os Forms com os Campos, na minha Lógica vou preencher o PRODUTO e Depois coloca uma ORDER e o ORDERNO vai relacionar com o ID do Produto para que eu possa fazer depois um FORM de SELECT´s até mesmo para Praticar.
mas ai que vem o problema, que dentro do meu Humilde conhecimento não consigo sair deste ponto, quando eu coloco os Inserts no Comando do SQL da certo, mas
quando eu coloco pelo C# da erro pelo que eu Entendi não segue as sequencias corretas pois o ID do Produto é IDENTITY registrando na sequencia 1,2,3...
e o ORDERNO registra de outra forma que não consigo enchergar no C# .
Vi em uns foruns que só pode um IDENTITY por Table tirei o do ID da Order e coloquei no ORDERNO mas sem sucesso.
Tambem criei um campo no C# para gerar o ORDERNO deixei como propriedade READYONLY = TRUE mas tambem sem sucesso.
Se alguem me ajudar vou agradecer muito galera, abraço..
Bruno Souza
Curtidas 0
Respostas
Marcos P
19/11/2015
As colunas com IDENTITY ( normalmente as PKs nas tabelas ), NÃO DEVEM ser passadas no comando INSERT, o Sql Server se encarrega de preenchê-las...
Já as chaves estrangeiras, que devem estar relacionadas as chaves primárias nas tabelas de origem, devem ser inseridas normalmente.
Se você necessita incluir um item na tabela principal, para depois usar a chave gerada como referência nas demais tabelas ( como em um mestre-detalhe ), você deve capturar o IDENTITY gerado na tabela principal, para, na sequencia, montar os inserts das outras tabelas, passando esse valor de maneira fixa ( justamente a FK )...
Ficou meio confuso essa explicação, mas acho que dá pra entender.
Já as chaves estrangeiras, que devem estar relacionadas as chaves primárias nas tabelas de origem, devem ser inseridas normalmente.
Se você necessita incluir um item na tabela principal, para depois usar a chave gerada como referência nas demais tabelas ( como em um mestre-detalhe ), você deve capturar o IDENTITY gerado na tabela principal, para, na sequencia, montar os inserts das outras tabelas, passando esse valor de maneira fixa ( justamente a FK )...
Ficou meio confuso essa explicação, mas acho que dá pra entender.
GOSTEI 0
Bruno Souza
19/11/2015
então Marcos ficou confuso, na ver de não entendi
GOSTEI 0
Bruno Souza
19/11/2015
eu só quero e preciso, que a FK seja o mesmo número da Pk se não eu não vou conseguir ter o vínculo do produto com a a ordem. . . .
GOSTEI 0
Marcos P
19/11/2015
O valor do IDENTITY gerado na tabela principal pelo Sql Server, deve ser a PK nessa tabela.
Depois de gerado, esse valor deve ser recuperado e atualizado nas tabelas relacionadas como FK.
No exemplo acima, quando você gera o IDENTITY 1475 na tabela principal ( de pedido, por exemplo ), é essa chave que deve inserir como FK na tabela relacionada ( de Itens, nesse caso ), que também tem seu IDENTITY ( para fins de controle ).
Repare que ambas tem seus respectivos sequenciais, pois tanto pedidos, quanto itens devem ter linhas únicas com características próprias.
Depois de gerado, esse valor deve ser recuperado e atualizado nas tabelas relacionadas como FK.
Tabela Principal
ID* Descricao Data
---- --------------- ------------
1 AAA 01/01/01
2 BBB 02/02/02
3 CCC 03/03/03
: : :
1475 FGT 05/08/12 << Aqui ocorre o insert na tabela principal ( IDENTITY + PK )*
----------------------------------
Tabela Relacionada
ID* ID_Princ Descricao
----- -------- --------------------
1 2 Bolacha Maria
2 5 Bolacha Água e Sal
3 1 Biscoito de Polvilho
: : :
23541 1475 Outra Bolacha
------------------------------------
( IDENTITY + PK )*
No exemplo acima, quando você gera o IDENTITY 1475 na tabela principal ( de pedido, por exemplo ), é essa chave que deve inserir como FK na tabela relacionada ( de Itens, nesse caso ), que também tem seu IDENTITY ( para fins de controle ).
Repare que ambas tem seus respectivos sequenciais, pois tanto pedidos, quanto itens devem ter linhas únicas com características próprias.
GOSTEI 0
Bruno Souza
19/11/2015
Fiz assim:
CREATE TABLE TBprouct( ---> //tabela Produto//
IDPRODUCT INT PRIMARY KEY identity (1,1),
DESCRI VARCHAR(50) NULL,
PRICE DECIMAL(10,2) NOT NULL,
AMOUNT INT NOT NULL,
DATEOUT VARCHAR(10) NULL,
)
CREATE TABLE TBorder( ---> //tabela Ordem//
IDORDER INT NOT NULL PRIMARY KEY identity REFERENCES TBprouct(IDPRODUCT),
SO VARCHAR (4) NOT NULL,
)
Agora faz o Vinculo inserindo os dados Pelo C#
SELECT SO, DESCRI, DATEOUT FROM TBorder, TBprouct WHERE TBorder.IDORDER = TBprouct.IDPRODUCT
SO DESCRI DATEOUT
1 SO08 TESTE 12/03/2013
2 SO09 TESTE2222 12/03/2013
3 SO10 TESTE000 01/01/2013
4 SO10 SOFT 01/01/2013
5 SO10 SOFT ACESS 01/01/2010
Agora preciso terminar o Login e mais alguns outros problemas no sistema mas ta Rolando...
Vlw Marcos...
CREATE TABLE TBprouct( ---> //tabela Produto//
IDPRODUCT INT PRIMARY KEY identity (1,1),
DESCRI VARCHAR(50) NULL,
PRICE DECIMAL(10,2) NOT NULL,
AMOUNT INT NOT NULL,
DATEOUT VARCHAR(10) NULL,
)
CREATE TABLE TBorder( ---> //tabela Ordem//
IDORDER INT NOT NULL PRIMARY KEY identity REFERENCES TBprouct(IDPRODUCT),
SO VARCHAR (4) NOT NULL,
)
Agora faz o Vinculo inserindo os dados Pelo C#
SELECT SO, DESCRI, DATEOUT FROM TBorder, TBprouct WHERE TBorder.IDORDER = TBprouct.IDPRODUCT
SO DESCRI DATEOUT
1 SO08 TESTE 12/03/2013
2 SO09 TESTE2222 12/03/2013
3 SO10 TESTE000 01/01/2013
4 SO10 SOFT 01/01/2013
5 SO10 SOFT ACESS 01/01/2010
Agora preciso terminar o Login e mais alguns outros problemas no sistema mas ta Rolando...
Vlw Marcos...
GOSTEI 0