Visual Basic.NET - Insertar en varias tablas al tiempo

 
Vista:

Insertar en varias tablas al tiempo

Publicado por Aldemar (3 intervenciones) el 15/05/2010 18:22:32
Buenas actualmente estoy empezando a programar en visual basic.net conectado con una base de datos en sql server estoy realizando una agenda electronica con tablas normalizadas y tengo un problema y es que al momento de introducir datos de una tabla a otra pasa lo siguiente:

* No me deja registrar en una tabla donde esta relacionada con otro pues porque me dice que hay un problema con la llave foranea

Hasta ahora tengo este codigo pero no se porque no me deja insertar en las tablas relacionadas

Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlClient.SqlDataReader
Imports System.Windows.Forms
Imports System.Xml
Public Class SQLCONECTAR
Public trans As SqlTransaction
Public cadena As String
Public conectar As SqlConnection


Public Sub sqlconecta()
Try
cadena = "Data Source=ALDEMAR-8F76C29\SQLEXPRESS;Initial Catalog=Agenda;Integrated Security=True"
conectar = New SqlConnection
conectar.ConnectionString = cadena
conectar.Open()
trans = conectar.BeginTransaction("Transaction")
Catch ex As Exception
conectar.Close()
MsgBox(ex.Message)
End Try
End Sub
Public Sub insertar()
Dim insertar As New SqlClient.SqlCommand()
insertar.CommandType = System.Data.CommandType.Text

insertar.CommandText = "INSERT INTO Contactos (Nombres,Apellidos,Sexo) values('" & Agenda.Nombres.Text & "','" & Agenda.Apellidos.Text & "','" & Agenda.Sexo.Text & "')"
trans.Commit()
insertar.CommandText = "INSERT INTO Contacto_Telefono(Contatos.CodigoUsuario, Telefono, Tipo_Telefono) values ('" & Agenda.CodigoUsuario.Text & "','" & Agenda.Telefono.Text & "','" & Agenda.Tipo_Telefono.SelectedValue & "' )"
insertar.Connection = conectar

Try
If ((insertar.ExecuteNonQuery() <> 0)) Then
MessageBox.Show("Nuevo Contacto Registrado ")

End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try

End Sub

End Class

Las tablas que tengo son Contactos, TipoTelefono,TipoDireccion,TipoEmail
ContactosTelefono, ContactoDirecion, ContactoEmail y su relacion es la siguienete

Contactos ------------------ ContactoTelefono--------------TipoTelefono
Contactos ------------------ ContactoDireccion--------------TipoDireccion
Contactos ------------------ ContactoEmail--------------TipoEmail

Gracias Espero que me puedan ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Insertar en varias tablas al tiempo

Publicado por OliBeer (391 intervenciones) el 18/05/2010 17:00:24
Hola,

Lo que sucede es que no puedes utilizar tu SqlCommand "insertar" así, el segundo elimina el primero, y por eso te truena con la integridad referencial. Declara dos "insertar" y utiliza cada uno para cada operación.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar en varias tablas al tiempo

Publicado por Aldemar (3 intervenciones) el 18/05/2010 17:19:53
Ok gracias ya lo hice y aun asi me sigue saliendo el mismo error de la llave foranea mira te mando lo que hice esos dos metodos los llamo con un boton guardar pero no se si en el insert de contacto_telefono ponga Contatos.CodigoUsuario porque no se como decir que en el momento de ejecucion guarde el codigo del contacto que estoy creando en la tabla de contacto_telefono por otro lado me gustaria saber como haria para que se puede agregar otros telefonos de un mismo contacto si es con un insert o con un update

Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlClient.SqlDataReader
Imports System.Windows.Forms
Imports System.Xml
Public Class SQLCONECTAR
Public trans As SqlTransaction
Public cadena As String
Public conectar As SqlConnection


Public Sub sqlconecta()
Try
cadena = "Data Source=ALDEMAR-8F76C29\SQLEXPRESS;Initial Catalog=Agenda;Integrated Security=True"
conectar = New SqlConnection
conectar.ConnectionString = cadena
conectar.Open()
trans = conectar.BeginTransaction("Transaction")
Catch ex As Exception
conectar.Close()
MsgBox(ex.Message)
End Try
End Sub
Public Sub insertar()
Dim insertar As New SqlClient.SqlCommand()
insertar.CommandType = System.Data.CommandType.Text

insertar.CommandText = "INSERT INTO Contactos (Nombres,Apellidos,Sexo) values('" & Agenda.Nombres.Text & "','" & Agenda.Apellidos.Text & "','" & Agenda.Sexo.Text & "')"
trans.Commit()
insertar.Connection = conectar

Try
If ((insertar.ExecuteNonQuery() <> 0)) Then
MessageBox.Show("Nuevo Contacto Registrado ")

End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try

End Sub
Public Sub insertar_Telefono()
Dim insertar_Telefono As New SqlClient.SqlCommand()
insertar_Telefono.CommandType = System.Data.CommandType.Text

insertar_Telefono.CommandText = "INSERT INTO Contacto_Telefono(Contatos.CodigoUsuario, Telefono, Tipo_Telefono) values ('" & Agenda.CodigoUsuario.Text & "','" & Agenda.Telefono.Text & "','" & Agenda.Tipo_Telefono.SelectedValue & "' )"
insertar_Telefono.Connection = conectar

Try
If ((insertar_Telefono.ExecuteNonQuery() <> 0)) Then
MessageBox.Show("Nuevo Contacto Registrado ")

End If
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try

End Sub
End Class
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar en varias tablas al tiempo

Publicado por OliBeer (391 intervenciones) el 18/05/2010 20:09:00
Hola,

Bueno, lo que veo es que insertas correctamente el Contacto, pero lo que no veo, es que actualizes el objeto Agenda con el Id insertado en el campo CodigoUsuario, es por eso que te está marcando el error y el Commit nunca se completa.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Insertar en varias tablas al tiempo

Publicado por Aldemar (3 intervenciones) el 18/05/2010 22:02:35
y como lo puedo actualizar??

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar