cintiadel 0 Denunciar post Postado Junho 18, 2009 estou desenvolvendo uma pagina de atualização do meu sistema onde ele verifica dados de uma tabela e compara com outra, se já houver o registro ele não fará nada, mas se não houver ele terá que inserir isso sempre vinculado ao campo que elas tem em comum. mas esta apresentando o seguinte erro: Já existe um DataReader aberto associado a este comando que deve ser fechado primeiro. Não sei de qual dataReader ele esta dizendo e onde fecha-lo ja tentei diversas vezes, conto com a ajuda de vocês. Segue o código abaixo: desde já agradeço Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Server.ScriptTimeout = 999999 Dim consei As New Data.SqlClient.SqlConnection("conexao1") Dim concount As New Data.SqlClient.SqlConnection("conexao1") Dim conweb As New Data.SqlClient.SqlConnection("conexao2") Dim j As Integer Dim k As Integer Dim i As Integer Dim hora_inicio As Date = Now Dim TOTAL_REGISTROS As Integer Dim com_sql_temp As New Data.SqlClient.SqlCommand Dim com_sql_conta As New Data.SqlClient.SqlCommand Dim com_ins As New Data.SqlClient.SqlCommand Dim sql As New Data.SqlClient.SqlCommand Dim dr_sei As Data.SqlClient.SqlDataReader Dim dr_count As Data.SqlClient.SqlDataReader Dim dr_ins As Data.SqlClient.SqlDataReader consei.Open() com_sql_temp.Connection = consei com_sql_temp.CommandTimeout = 0 com_sql_temp.CommandText = "Select campo1, campo2 from tabela1" dr_sei = com_sql_temp.ExecuteReader concount.Open() com_sql_conta.Connection = concount com_sql_conta.CommandText = "Select distinct count(campo1) from tabela1" dr_count = com_sql_conta.ExecuteReader dr_count.Read() TOTAL_REGISTROS = dr_count(0) dr_count.Close() dr_count = Nothing j = 0 k = 0 sql.Connection = conweb conweb.Open() While dr_sei.Read() With sql.Parameters .Add(New Data.SqlClient.SqlParameter("@campo1", dr_sei("campo1"))) .Add(New Data.SqlClient.SqlParameter("@campo2", dr_sei("campo2"))) End With com_ins.CommandText = "Select campo1 from tabela2 where campo1='" & dr_sei("campo1") & "'" com_ins.Connection = conweb dr_ins = com_ins.ExecuteReader If dr_ins.HasRows = False Then sql.CommandText = "Insert into tabela2(campo1,campo2) values " sql.CommandText = sql.CommandText & "(@campo1,@campo2)" i = 0 sql.ExecuteNonQuery() i = i + 1 k = k + 1 sql.Parameters.Clear() End If dr_ins.Close() End While dr_sei.Close() consei.Close() conweb.Close() concount.Close() End Sub End Class Compartilhar este post Link para o post Compartilhar em outros sites
DPSJ 0 Denunciar post Postado Junho 18, 2009 Cíntia, boa tarde! http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Acredito que apenas você inserir na sua ConnectionString o seguinte parâmetro: MultipleActiveResultSets=True; ele permite que você utilize numa mesma conexão múltiplos dataReaders. Exemplo: ' Em VB. Using con As New SqlConnection("Server=.\SQLEXPRESS;DataBase=MinhaBase;uid=Usuario;password=MinhaPassword;MultipleAc tiveResultSets=True;") 'Cria as duas batchs de consulta Dim cm0 As new SqlCommand("consulta_0") Dim cm1 As new SqlCommand("consulta_1") ' ---- agregue as consultas aos respectivos dataReaders ---- Using dr0 As SqlDataReader = cm0.ExecuteReader() ' Executa a batch consulta_0. While (dr0.Read()) ' Fazer alguma coisa Using dr1 As SqlDataReader = cm1.ExecuteReader() ' Executa a segunda batch, ou seja a consulta_1 While dr1.Read() ' Fazer mais alguma coisa. End While End Using End While End Using End Using Você poderá ter vários results em uma mesma conexão, descartando no caso sua segunda conexão criada, e eles poderão fazer uma co-relação entre a linha do DataReader dr1 com a linha de resultado do dr0. http://forum.imasters.com.br/public/style_emoticons/default/closedeyes.gif É isso aí, espero que lhe ajude! Caso queira pesquisar mais profundo sobre o assunto: http://forum.imasters.com.br/public/style_emoticons/default/seta.gif http://danielfonsecacastro.spaces.live.com...BDE58D2!231 Abraços! :D Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Junho 18, 2009 Nunca tinha visto isso. Tudo que vi até hoje é que não é possível criar dois DataReaders aos mesmo tempo utilizando o mesmo objeto de conexão. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
cintiadel 0 Denunciar post Postado Junho 19, 2009 foi so colocar MultipleActiveResultSets=True; na string de conexao que funcionou Valeu muito obrigada Compartilhar este post Link para o post Compartilhar em outros sites
Juliano.net 2 Denunciar post Postado Junho 19, 2009 Cintia e demais, Observem que o recurso MARS só está disponível a partir do SQL Server 2005. Compartilhar este post Link para o post Compartilhar em outros sites
DPSJ 0 Denunciar post Postado Junho 22, 2009 Bom dia Cíntia, por nada fico feliz por tê-la ajudado! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Tenha uma boa semana. :D Valeu Juliano pela observação! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites