Visual Basic - SQLDataAdapter

Hkostinha

Membro
Boas pessoal.. preciso da vossa ajuda...

É a primeira vez que recorro a este forum.

Estou a trabalhar com C# e bases de dados Sql.
Em geral o que estou a fazer é simples.. Tenho duas tabelas em sql com chaves primárias (ID) sendo que elas estam relacionadas por esse mesmo ID.
O que eu preciso é de fazer um programa que me faça a gestão destas duas tabelas.. (insert update delete) ..

Outro pormenor é que a tabela principal tem identidade automática na configuraação da propria tabela sql. Assim quando eu insiro um novo registo, na tabela o Id automaticamente é incrementado. E a tabela "filha" devia ir buscar o ID auto-incrementado da tabela mae para fazer a relação..

Eu não estou a conseguir isso.. A tabela mãe funciona ok mas a tabela filha incia o ID normalmente.. não fazendo as relações correctas..
Foi me dito já que teria a ver com o Sql Data Adapter mas eu estou perdido..

http://www.pcreview.co.uk/forums/strongly-typed-datasets-and-refresh-data-table-option-t3161627.html
Esta pessoa esta com o mesmo problema que eu... Caso seja mais facil para me entenderem.. mas eu não precebi a solução dele..

Obrigado
 
Tenho duas tabelas em sql com chaves primárias (ID) sendo que elas estam relacionadas por esse mesmo ID.

?não percebi. Qual é o tipo de relação entre as tabelas? Normalmente tens na tabela 1 a tua PK e tabela 2 a PK da tabela 2 e outro campo(a FK) que representa a relação com a tabela 1

supondo que um produto só tem uma categoria:

categorias
--------- ---------
CatID (identity primary key)
descricao
....


produtos
--------
ProdId(identity primary key)
CatID(foreign key)
descricao
....


Isso é uma pergunta feita em 2007! Muita coisa já evolui! Procura por "vb.net CRUD example"

Básicamente precisas de saber qual foi o último ID gerado pelo primeiro insert e depois usas esse ID na foreign key da outra tabela....
 
Sim a relação entre tabelas é exatamente como descreveste tenho a PK e FK na tabela dois.

Exacto, preciso de sabeer o último ID gerado pelo primeiro insert e depois usar esse ID na foreign key da tabela 2... É precisamento isto que não consigo.. Ao fazer insert na tabela 2, preciso que me vá buscar a FK, ou a Pk da tabela 1.. E não vai...

Vou pesquisar pelo sugestão que deste, obrigado
 
Com a instrução a baixo em consigo obter o ID da tabela 1 e assim leva lo para a tabela 2.

Dim ID As Integer = Me._DA.MyTabela.Rows.Item(Me._DA.MyTabela.Rows.Count -1).Field(Of Integer)(Me._DA.MyTabela.Columns("ID"))

rowDAResultadosLn("Id") = ID (tabela 2)

O meu problema é... Ja existiram registos na tabela (por exemplo 20) , são apagados.
O proximo registo deveria ser o 21 mas como a tabela se encontra vazia, ele vai buscar me o ID = 1 para aplicar na tabela 2, apesar de na tabela 1 inserir o ID correcto (21).

Não sei como ultrapassar esta parte :(
 
Acho que devias primeiro comprar um bom livro :)

Esquece o SqlDataAdapter. É desnecessário


Sub Main(args As String())
Dim conn As New SqlConnection()
conn.ConnectionString = "Server=SERVIDOR;Database=BASEDEDADOS;Integrated Security=True;" 'muda para a tua connection string


Try
conn.Open()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try


If conn IsNot Nothing AndAlso conn.State = ConnectionState.Open Then
Dim newID As Integer = 0


newID = Convert.ToInt32(ExecScalar(conn, "INSERT INTO Categorias(descricao) OUTPUT INSERTED.id VALUES('pastilhas)"))


If newID > 0 Then
Console.WriteLine("Adicionado à tabela de categorias o registo : " + newID.ToString())
Else
Console.WriteLine("Erro")
End If


conn.Close()
End If
End Sub


Public Function ExecScalar(ByRef conn As SqlConnection, sql As String) As Object
Dim retObject As Object = Nothing
Dim command As SqlCommand = Nothing


Try
command = New SqlCommand(sql, conn)


retObject = command.ExecuteScalar()
Catch exp As SqlException
Console.WriteLine(exp.Message)
Finally
command.Dispose()
End Try


Return retObject
End Function


------------------

isto: "INSERT INTO Categorias(descricao) OUTPUT INSERTED.id VALUES('pastilhas)" retorna o ID que foi gerado após o insert (id é o nome do campo que é primary key)

Se estiveres a usar uma versão anterior ao sql server 2005 tens que substituir o insert acima por este:

"INSERT INTO Categorias(descricao) VALUES('pastilhas);select SCOPE_IDENTITY();"
 
Na minha opinião podes esquecer isso do auto increment do SQL, faz tu o próprio incremento em código, vais evitar problemas e chatices.
 
Back
Topo