Jump to content

Archived

This topic is now archived and is closed to further replies.

cintiadel

[Resolvido] newsletter em asp net

Recommended Posts

Tudo que esta dentro do objeto email você terá que jogar para variáveis, pois quando você der um close no objeto email, pode esquecer que não usará mais ele.

 

Abraços...

tudo o q?

eu fiz assim:

Dim vemail As String = email.HasRows

Share this post


Link to post
Share on other sites

Agora que copiei seu código para testar que reparei, você esta tentando usar um ExecuteReader para o insert e o update. Esta errado.

Utilize o ExecuteNonQuery para executar comandos no banco. E utilizando o ExecuteNonQuery não precisa mudar nada, pode deixar o código como esta.

 

Abraços...

Share this post


Link to post
Share on other sites

Agora que copiei seu código para testar que reparei, você esta tentando usar um ExecuteReader para o insert e o update. Esta errado.

Utilize o ExecuteNonQuery para executar comandos no banco. E utilizando o ExecuteNonQuery não precisa mudar nada, pode deixar o código como esta.

 

Abraços...

fiz a seguinte mudança no código, mas esta dando erro, na linha do comando.executenonquery:"Já existe um DataReader aberto associado a este comando que deve ser fechado primeiro. "

e se substituo o executedatareader por executenonquery, da esse erro: " value of type integer cannot be converted to System.Data.SqlClient.SqlDataReader", devo q trocar para DataAdapter?

Dim email As Data.SqlClient.SqlDataReader
		Dim email2 As Data.SqlClient.SqlDataReader
		comando.Connection = conexao

		conexao.Open()
		comando.CommandText = "Select * from tabela1 where al_codigo='" & Session("cod") & "'"
		email = comando.ExecuteReader()
		email.Read()

		If email.HasRows = True Then
			If email("email") <> txt_email.Text Then
				Session("email") = txt_email.Text
				comando.CommandText = "Update tabela1 set email='" & Session("txt_email") & "',ativo='N' where al_codigo='" & Session("cod") & "'"
				comando.ExecuteNonQuery()
			ElseIf email("email") = "" Then
				comando.CommandText = "Insert into tabela1 (al_codigo,email,ativo) values ('" & Session("cod") & "','" & Session("email") & "','N')"
			   comando.ExecuteNonQuery()
			End If
			conexao.Close()
		End If

Share this post


Link to post
Share on other sites

Tente o seguinte:

 

Dim conexao As New Data.SqlClient.SqlConnection("")
		Dim comando As Data.SqlClient.SqlCommand
		Dim email As Data.SqlClient.SqlDataReader
		Dim email2 As Data.SqlClient.SqlDataReader
		Dim sql As String
		Dim emailLinha As Boolean = False

		comando.Connection = conexao

		conexao.Open()
		comando.CommandText = "Select * from tabela1 where al_codigo='" & Session("cod") & "'"
		email = comando.ExecuteReader()
		email.Read()

		If email.HasRows = True Then
			emailLinha = True
			If email("email") <> "" Then
				Session("email") = ""
				sql = "Update tabela1 set email='" & Session("txt_email") & "',ativo='N' where al_codigo='" & Session("cod") & "'"
			ElseIf email("email") = "" Then
				sql = "Insert into tabela1 (al_codigo,email,ativo) values ('" & Session("cod") & "','" & Session("email") & "','N')"
			End If
		End If
		email.Close()

		If (emailLinha) Then
			comando = New Data.SqlClient.SqlCommand
			comando.CommandText = sql
			comando.ExecuteNonQuery()
		End If

		conexao.Close()

 

Abraços...

Share this post


Link to post
Share on other sites

Tah dando erro: ExecuteNonQuery: propriedade Connection não foi inicializada.

 

me disseram q eu poderia fazer dessa forma tbm, mas tah dando erro, tbm...rsrs

Erro: Operator '=' is not defined for types char and boolean

Protected Sub btn_enviar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btn_enviar.Click
	Dim conexao As New Data.SqlClient.SqlConnection("conexao")
	Dim comando As New Data.SqlClient.SqlCommand
	comando.Connection = conexao

	conexao.Open()
	comando.CommandText = "Select * from tabela1 where al_codigo='" & Session("ra") & "'"
	Dim email As String = comando.ExecuteNonQuery().ToString

	If email("email") <> txt_email.Text Then
	  Session("email") = txt_email.Text
	  comando.CommandText = "Update tabela1 set email='" & Session("email") & "',ativo='N' where al_codigo='" & Session("ra") & "'"
	  comando.ExecuteNonQuery()
	ElseIf email("email") = "" Then
	  comando.CommandText = "Insert into tabela1 (al_codigo,email,ativo) values ('" & Session("ra") & "','" & Session("email") & "','N')"
	  comando.ExecuteNonQuery()
	End If
	conexao.Close()

  End Sub

Share this post


Link to post
Share on other sites

Você tem que aprender a ler o erro e resolver baseado no erro.

Estou fazendo sem testar, de cabeça e baseado no seu código.

 

Dim conexao As New Data.SqlClient.SqlConnection("")
		Dim comando As Data.SqlClient.SqlCommand
		Dim email As Data.SqlClient.SqlDataReader
		Dim email2 As Data.SqlClient.SqlDataReader
		Dim sql As String
		Dim emailLinha As Boolean = False

		comando.Connection = conexao

		conexao.Open()
		comando.CommandText = "Select * from tabela1 where al_codigo='" & Session("cod") & "'"
		email = comando.ExecuteReader()
		email.Read()

		If email.HasRows = True Then
			emailLinha = True
			If email("email") <> "" Then
				Session("email") = ""
				sql = "Update tabela1 set email='" & Session("txt_email") & "',ativo='N' where al_codigo='" & Session("cod") & "'"
			ElseIf email("email") = "" Then
				sql = "Insert into tabela1 (al_codigo,email,ativo) values ('" & Session("cod") & "','" & Session("email") & "','N')"
			End If
		End If
		email.Close()

		If (emailLinha) Then
			comando = New Data.SqlClient.SqlCommand
			comando.Connection = conexao
			comando.CommandText = sql
			comando.ExecuteNonQuery()
		End If

		conexao.Close()

Share this post


Link to post
Share on other sites

não posso alterar essas duas linhas senao ele perde a lógica...

ele tem q pegar o textbox, senao ele entra sempre no insert e n do update como alguns casos.

e se mudo essas linhas onde você colocou da erro : "Variable 'sql' is used before it has a been assigned a value.

A null reference exception could result at runtime"

e tbm erro: 'ExecuteNonQuery: propriedade CommandText não foi inicializada.'

 

If email("email") <> txt_email.Text Then
				Session("email") = txt_email.Text

Share this post


Link to post
Share on other sites

entao o insert n funciona preciso q se o select for falso ele execute o insert ao inves do update

Dim conexao As New Data.SqlClient.SqlConnection("")
		Dim comando As Data.SqlClient.SqlCommand
		Dim email As Data.SqlClient.SqlDataReader
		Dim email2 As Data.SqlClient.SqlDataReader
		Dim sql As String = String.Empty
		Dim emailLinha As Boolean = False

		comando.Connection = conexao

		conexao.Open()
		comando.CommandText = "Select * from tabela1 where al_codigo='" & Session("cod") & "'"
		email = comando.ExecuteReader()
		email.Read()

		If email.HasRows = True Then
			emailLinha = True
			If email("email") <> "" Then
				Session("email") = ""
				sql = "Update tabela1 set email='" & Session("txt_email") & "',ativo='N' where al_codigo='" & Session("cod") & "'"
			ElseIf email("email") = "" Then
				sql = "Insert into tabela1 (al_codigo,email,ativo) values ('" & Session("cod") & "','" & Session("email") & "','N')"
			End If
		End If
		email.Close()

		If (emailLinha) Then
			comando = New Data.SqlClient.SqlCommand
			comando.Connection = conexao
			comando.CommandText = sql
			comando.ExecuteNonQuery()
		End If

		conexao.Close()

será q você poderia me explicar o q fez pra q eu entenda, vou precisar disso em outras páginas tbm

Share this post


Link to post
Share on other sites

Isso é questão de lógica apenas, o seu insert estava no if do email("email") = "", eu utilizei da mesma forma, agora você esta falando se o select for falso. Você tem que executar o Insert quando o select não retornar nada ou quando o e-mail for igual a ""?

 

Abraços...

Share this post


Link to post
Share on other sites

Isso é questão de lógica apenas, o seu insert estava no if do email("email") = "", eu utilizei da mesma forma, agora você esta falando se o select for falso. Você tem que executar o Insert quando o select não retornar nada ou quando o e-mail for igual a ""?

 

Abraços...

seria a mesma coisa...

pq se email("email")= "" o select não irá retornar nda

Share this post


Link to post
Share on other sites

Dim conexao As New Data.SqlClient.SqlConnection("")
		Dim comando As Data.SqlClient.SqlCommand
		Dim email As Data.SqlClient.SqlDataReader
		Dim email2 As Data.SqlClient.SqlDataReader
		Dim sql As String = String.Empty

		comando.Connection = conexao

		conexao.Open()
		comando.CommandText = "Select * from tabela1 where al_codigo='" & Session("cod") & "'"
		email = comando.ExecuteReader()
		email.Read()

		If email.HasRows = True Then
			Session("email") = ""
			sql = "Update tabela1 set email='" & Session("txt_email") & "',ativo='N' where al_codigo='" & Session("cod") & "'"
		Else
			sql = "Insert into tabela1 (al_codigo,email,ativo) values ('" & Session("cod") & "','" & Session("email") & "','N')"
		End If
		email.Close()

			comando = New Data.SqlClient.SqlCommand
			comando.Connection = conexao
			comando.CommandText = sql
			comando.ExecuteNonQuery()

		conexao.Close()

Tente desta forma.

 

Abraços...

Share this post


Link to post
Share on other sites

Vou retirar sua verificação de HasRows, acho que não tem necessidade:

 

Dim conexao As New Data.SqlClient.SqlConnection("")
		Dim comando As Data.SqlClient.SqlCommand
		Dim email As Data.SqlClient.SqlDataReader
		Dim email2 As Data.SqlClient.SqlDataReader
		Dim sql As String = String.Empty

		comando.Connection = conexao

		conexao.Open()
		comando.CommandText = "Select * from tabela1 where al_codigo='" & Session("cod") & "'"
		email = comando.ExecuteReader()

		If email.Read() Then
			Session("email") = ""
			sql = "Update tabela1 set email='" & Session("txt_email") & "',ativo='N' where al_codigo='" & Session("cod") & "'"
		Else
			sql = "Insert into tabela1 (al_codigo,email,ativo) values ('" & Session("cod") & "','" & Session("email") & "','N')"
		End If
		email.Close()

			comando = New Data.SqlClient.SqlCommand
			comando.Connection = conexao
			comando.CommandText = sql
			comando.ExecuteNonQuery()

		conexao.Close()

Abraços...

Share this post


Link to post
Share on other sites

agora resolveu faltava colocar

emailLinha = True

no else se n ele n entra no ultimo bloco de codigo para executar o sql

muito obrigada pela paciencia e ajuda mais uma vez

topico resolvido

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.