• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

clviper

SELECT+INSERT com VB.net em VS 2005(RESOLVIDO)

10 mensagens neste tópico

Estou a correr o seguinte código:

Imports System.Data.SqlClient
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim querya, queryb, connString As String
        connString = "Data Source=PROGRAMACAO\SQLEXPRESS;Initial Catalog=Gazeta;Persist Security Info=True;User ID=sa;Password=123"
        Dim ligacao As New SqlConnection(connString)
        Dim comando, comandoaux As New SqlCommand
        Dim leitura As SqlDataReader
        Dim i, retval As Integer
        Dim pais, codigo As String
        ligacao.Open()
        querya = "SELECT * FROM paises$"
        comando.CommandText = querya
        comando.Connection = ligacao
        comandoaux.Connection = ligacao
        leitura = comando.ExecuteReader()
        i = 1
        While leitura.Read
            codigo = leitura.GetString(0)
            pais = leitura.GetString(1)
            queryb = "INSERT INTO paises(paisesstamp,nome,nomeabrv) VALUES('" & (codigo + Str(i)) & "','" + pais + "','" + codigo + "')"
            comandoaux.CommandText = queryb
            retval = comandoaux.ExecuteNonQuery()
            i = i + 1
        End While
    End Sub
End Class

Acontece que quando tento fazer o "reval = comandoaux.ExecuteNonQuery()" ele indica-me que já se encontra um DataAdapter DataReader associado a esse SqlCommand.

Já existe um DataReader aberto associado a este Comando, que tem de ser fechado primeiro.

Isso supostamente só deveria estar associado ao comando e não ao comandoaux. Alguem me poderia dar uma ajuda? Obrigado desde já

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Peço desculpa.. ele diz que já está associado é um dataReader e não um dataAdapter.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experiemnta isto

Imports System.Data.SqlClient
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim querya, queryb, connString As String
        connString = "Data Source=PROGRAMACAO\SQLEXPRESS;Initial Catalog=Gazeta;Persist Security Info=True;User ID=sa;Password=123"
        Dim ligacao As New SqlConnection(connString)
        Dim comando, comandoaux As New SqlCommand
        Dim leitura As SqlDataReader
        Dim i, retval As Integer
        Dim pais, codigo As String
        ligacao.Open()
        querya = "SELECT * FROM paises$"
        comando.CommandText = querya
        comando.Connection = ligacao
        comandoaux.Connection = ligacao
        leitura = comando.ExecuteReader()
        i = 1
        While leitura.Read
            codigo = leitura.GetString(0)
            pais = leitura.GetString(1)
            queryb = "INSERT INTO paises(paisesstamp,nome,nomeabrv) VALUES('" & (codigo + Str(i)) & "','" + pais + "','" + codigo + "')"
            comandoaux.CommandText = queryb
            comandoaux.ExecuteNonQuery()
            i = i + 1
        End While
    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código não está igual para além do retval? Parece-me que sim. Devolve o mesmo erro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois é o que me parecia que ia acontecer. tens de 1 ciclo a ler os  codigo e pais, e a seguir fazes outro ciclo a inserir.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas eu preciso destes dois ciclos. Como poderei fazer isto? A ideia é ler um registo numa tabela e pegar nesse mesmo registo e colocar noutra tabela. Já a mto tempo que não programo em VB e quando programei era em VB6. Este novos objectos são bastante diferentes. Alguma ideia?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu criava uma classe onde guardava o codigo e o pais e indice.

depois  no primeiro ciiclo preenchia a classe os valoes e adicoanava a uma collection.

No seguindo ciclo percorria todos os membros da collection e fazia os inserts

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tens que fazer o um CLOSE ao primeiro Execute, e a ligaçao e voltares abrir em baixo.. axo que assim deixa de dar o erro... e fica a funcionar... visto k dpx entras num ciclo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que tu tas a fazer é executar dois comandos ao mesmo tempo, não podes, tens de fechar o leitura e quando fizeres o execute já nao dá o erro

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora