ERRO COM EXECUTENONQUERY!

LIBELOLAOLV 31/01/2013 23:27:54
#418545
Bom pessoal, creio que esse seja um erro clássico. Enfim, o erro é : [Ô]executenonquery requer uma connection aberta e disponível. o estado atual da conexão é fechada[Ô] Bom, eu declarei uma conexão, só não sei se a instanciei no form que estou trabalhando... Bom, preciso de ajuda ae... Segue o meu modulo caso haja necessidade:
Módulo

Public cnnSql As New SqlClient.SqlConnection
Public strSql As String
-------------------------------
A variavel global que estou usando para executar o cmd


Private cmdCliente As New SqlClient.SqlCommand

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

A minha classe

Public Function AbrirCnnSQL(Optional ByRef Mensagem As String = [Ô][Ô]) As _
SqlClient.SqlConnection

[ô]-- Permitir cnnSQL com banco de dados --[ô]
Dim cnn As New SqlClient.SqlConnection


cnn.ConnectionString = [Ô]Server=(local)\SQLEXPRESS;[Ô] & _
[Ô]User Id=sa; Password=; Database=db_PROJETO; Connection TimeOut=60;[Ô]

Try
cnn.Open()
Return (cnn)

Catch ex As Exception

Mensagem = Err.Description.ToString
Return Nothing

End Try

End Function



-------


E a rotina de [Ô]Gravar[Ô] que está dando a do erro:

If blnInserir = True Then


strSql = [Ô]Execute PR_INC_CLIENTE @Cod_Cli, @Nome_Cli, @Endereco[Ô]

cmdCliente.Parameters.AddWithValue([Ô]@Cod_Cli[Ô], mskcod.Text)
cmdCliente.Parameters.AddWithValue([Ô]@Nome_Cli[Ô], txtNome.Text)
cmdCliente.Parameters.AddWithValue([Ô]@Endereco[Ô], txtEndere.Text)



Else

strSql = [Ô]Execute PR_ALT_CLIENTE @Cod_Cli, @Nome_Cli, @Endereco[Ô]

cmdCliente.Parameters.AddWithValue([Ô]@Cod_Cli[Ô], mskcod.Text)
cmdCliente.Parameters.AddWithValue([Ô]@Nome_Cli[Ô], txtNome.Text)
cmdCliente.Parameters.AddWithValue([Ô]@Endereco[Ô], txtEndere.Text)


End If

cmdCliente.CommandText = strSql
cmdCliente.Connection = cnnSql

Try
cmdCliente.ExecuteNonQuery()

Catch ex As Exception
MessageBox.Show([Ô]Ocorreu um erro: [Ô] & vbNewLine & Err.Description.ToString, _
[Ô]Erro ao Gravar[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
cmdCliente.Parameters.Clear()
Exit Sub

End Try
If blnInserir = True Then
MessageBox.Show([Ô]Cliente Cadastrado com sucesso[Ô], [Ô]Confirmação[Ô], MessageBoxButtons.OK)
Else
MessageBox.Show([Ô]Cliente Alterado com sucesso[Ô], [Ô]Confirmação[Ô], MessageBoxButtons.OK)

End If

cmdCliente.Parameters.Clear()

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


Desde já, obrigado!
FELLIPEASSIS 02/02/2013 21:46:45
#418654
Faz assim cara...
If blnincluir = True Then [ô]variavel global public booleana q inicia como true
strSql = [Ô]Execute Pr_Inc_Cliente @c_nome, @c_datanasc, @c_cpf[Ô]
Else
strSql = [Ô]Execute Pr_Alt_Cliente @cod_Cliente, @c_nome, @c_datanasc[Ô]
cmdcliente.Parameters.AddWithValue([Ô]@cod_Cliente[Ô], maskcodcli.Text)
end if
cmdcliente.CommandText = strSql
cmdcliente.Parameters.AddWithValue([Ô]@c_cep [Ô], maskCep.Text)
cmdcliente.Parameters.AddWithValue([Ô]@c_cpf[Ô], maskcpf.Text)
cmdcliente.Parameters.AddWithValue([Ô]@c_nome[Ô], txtNome.Text.Trim()) [ô]nao esqueça de colocar trim nos txt para tiras os espaços q o usuario coloca
cmdcliente.Connection = cnnSql
Try
If blnincluir = True Then
Dim obj As Object = cmdcliente.ExecuteScalar()
maskcodcli.Text = obj.ToString()
Else
cmdcliente.ExecuteNonQuery()
End If
MessageBox.Show([Ô]Gravado com sucesso![Ô], [Ô]Gravar[Ô], MessageBoxButtons.OK)
cmdcliente.Parameters.Clear()
Catch
MessageBox.Show([Ô]Ocorreu um erro:[Ô] & vbNewLine & _
Err.Description.ToString, _
[Ô]Gravar Dados[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
cmdcliente.Parameters.Clear()
Exit Sub
End Try
cmdcliente.Parameters.Clear()
[ô]-- Limpar a Tela --[ô]
BTNNOVO_Click(sender, e)
utiliza o msm botao de gravar tbm para alterar só mudando a variavel booleana para false quando for alterar e true p/ gravar
LIBELOLAOLV 04/02/2013 00:00:30
#418682
Cara, tentei adaptar essa sua rotina à minha, mas ele persiste dizendo que o estado da conexão é fechada... Nem sei mais o que fazer...

PS: Você tem o mesmo nome de um cara que fez o ténico comigo na ETEC DE ITAQUERA, se for você um SALVE pra ti, se responder te digo quem sou, caso a gente se conheça mesmo! HEHE, De qualquer forma, obrigado pela ajuda! ;)
JABA 04/02/2013 13:38:59
#418728
você ja verificou se o serviço do banco de dados está ativo na maquina?

vlw
FOXMAN 04/02/2013 13:41:45
#418729
Resposta escolhida
[ô]ou Faz assim :

cnnSql = AbrirCnnSQL()
cmdCliente.CommandText = strSql
cmdCliente.Connection = cnnSql


[ô]ou faz assim : 

cmdCliente.CommandText = strSql
cmdCliente.Connection = AbrirCnnSQL




[ô]Para depois fazer assim :
Try
cmdCliente.ExecuteNonQuery()

Catch ex As Exception
MessageBox.Show([Ô]Ocorreu um erro: [Ô] & vbNewLine & Err.Description.ToString, _
[Ô]Erro ao Gravar[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)
cmdCliente.Parameters.Clear()
Exit Sub

End Try
TSANALISTA 04/02/2013 13:56:29
#418739
Eu já ia passar essa forma que o Foxman passou, pelo o seu código estava faltando a parte de abrir a conexão antes de executar o SQLCOMMAND


Public Function Incluir(ByVal cliente As PessoaInformation) As Boolean
cliente.Codigo = 0
_retvalor = False

Try
//Instancia a variável de conexão com o banco de dados

[txt-color=#0000f0]_sqlcon = New SqlClient.SqlConnection(_conStr)
_sqlcon.Open()[/txt-color]
//Se quiser pode definir o tipo de transação (Eu acho melhor assim para sistemas com grandes cargas de dados)
_transacao = _sqlcon.BeginTransaction(IsolationLevel.ReadCommitted)

//Instancia o objeto Sqlcommand
_sqlcom = New SqlClient.SqlCommand()

//aqui eu defino os valores para cada propriedade ou método do SQL Command
With _sqlcom

.Connection = _sqlcon
.CommandType = CommandType.Text
[ô].CommandText = [Ô] UPDATE Pessoa[Ô] & _
[ô] [Ô] SET Pes_Tipo_ID=@Pes_Tipo_ID, Pes_DataCad=@Pes_DataCad, Pes_RazaoSoc=@Pes_RazaoSoc,[Ô] & _
[ô] [Ô]Pes_Fantasia=@Pes_Fantasia, Pes_DataNasc=@Pes_DataNasc,Pes_CPFCNPJ=@Pes_CPFCNPJ[Ô] & _
[ô] [Ô] WHERE Pes_Id = @Pes_Id;[Ô]

.CommandText = [Ô]insert into Pessoa(Pes_Tipo_ID,Pes_DataCad,Pes_RazaoSoc,Pes_Fantasia,Pes_DataNasc,[Ô] & _
[Ô]Pes_CPFCNPJ,Pes_OrgExp,Pes_RGIE,Pes_IM,Pes_SUFRAMA,Pes_TipoCliente,Pes_TipoFornecedor,Pes_TipoFuncionario,[Ô] & _
[Ô]Pes_TipoMotorista,Pes_TipoCooperado)[Ô] & _
[Ô] values (@Pes_Tipo_ID,@Pes_DataCad,@Pes_RazaoSoc,@Pes_Fantasia,@Pes_DataNasc,[Ô] & _
[Ô]@Pes_CPFCNPJ,@Pes_OrgExp,@Pes_RGIE,@Pes_IM,@Pes_SUFRAMA,@Pes_TipoCliente,@Pes_TipoFornecedor,@Pes_TipoFuncionario,[Ô] & _
[Ô]@Pes_TipoMotorista,@Pes_TipoCooperado); select @@IDENTITY;[Ô]

[ô].CommandText = [Ô] INSERT INTO Pessoa[Ô] & _
[ô] [Ô] SET Pes_Tipo_ID=@Pes_Tipo_ID, Pes_DataCad=@Pes_DataCad, Pes_RazaoSoc=@Pes_RazaoSoc,[Ô] & _
[ô] [Ô]Pes_Fantasia=@Pes_Fantasia, Pes_DataNasc=@Pes_DataNasc,Pes_CPFCNPJ=@Pes_CPFCNPJ, Pes_OrgExp=@Pes_OrgExp, Pes_RGIE=@Pes_RGIE,[Ô] & _
[ô] [Ô]Pes_IM=@Pes_IM, Pes_SUFRAMA=@Pes_SUFRAMA, Pes_TipoCliente=@Pes_TipoCliente, Pes_TipoFornecedor=@Pes_TipoFornecedor,[Ô] & _
[ô] [Ô]Pes_TipoFuncionario=@Pes_TipoFuncionario, Pes_TipoMotorista=@Pes_TipoMotorista, Pes_TipoCooperado=@Pes_TipoCooperado[Ô] & _
[ô] [Ô] WHERE Pes_Id = @Pes_Id;[Ô]

.Parameters.AddWithValue([Ô]@Pes_Tipo_ID[Ô], cliente.Tipo)

.Parameters.AddWithValue([Ô]@Pes_DataCad[Ô], cliente.Data_Cadastro)

.Parameters.AddWithValue([Ô]@Pes_RazaoSoc[Ô], cliente.Razao_Social)

.Parameters.AddWithValue([Ô]@Pes_Fantasia[Ô], cliente.Fantasia)

If cliente.Data_Nascimento IsNot Nothing Then

.Parameters.AddWithValue([Ô]@Pes_DataNasc[Ô], cliente.Data_Nascimento)

Else

.Parameters.AddWithValue([Ô]@Pes_DataNasc[Ô], cliente.Data_Nascimento).Value = DBNull.Value

End If

.Parameters.AddWithValue([Ô]@Pes_CPFCNPJ[Ô], cliente.CPFCNPJ)

.Parameters.AddWithValue([Ô]@Pes_OrgExp[Ô], cliente.Orgao_Exp)

.Parameters.AddWithValue([Ô]@Pes_RGIE[Ô], cliente.RGIE)

.Parameters.AddWithValue([Ô]@Pes_IM[Ô], cliente.IM)

.Parameters.AddWithValue([Ô]@Pes_SUFRAMA[Ô], cliente.Insc_Suframa)

.Parameters.AddWithValue([Ô]@Pes_TipoCliente[Ô], cliente.Tipo_Cliente)

.Parameters.AddWithValue([Ô]@Pes_TipoFornecedor[Ô], cliente.Tipo_Fornecedor)

.Parameters.AddWithValue([Ô]@Pes_TipoFuncionario[Ô], cliente.Tipo_Funcionario)

.Parameters.AddWithValue([Ô]@Pes_TipoMotorista[Ô], cliente.Tipo_Motorista)

.Parameters.AddWithValue([Ô]@Pes_TipoCooperado[Ô], cliente.Tipo_Cooperado)



.Transaction = _transacao
.ExecuteNonQuery()
.Parameters.Clear()

End With
_transacao.Commit()
_retvalor = True
Catch ex As Exception
_transacao.Rollback()
Throw ex
Finally
liberaTodosObjetos()
End Try

Return _retvalor
End Function
FELLIPEASSIS 05/02/2013 17:16:21
#418835
Opá amigo sou eu msm da Etec Itaquera hehehehe qualquer coisa manda um email
Essa parte do codigo q eu passei, tem que colocar nas tabelas do banco o codigo como auto incremento ou identity para yes nas propriedades das tabelas
de uma olhada nesse site http://www.baboo.com.br/2012/07/ado-net-obtendo-id-do-registro-recem-inserido-no-sql-server/
de como fazer procedures com auto incremento e retornar ao codigo q foi inserido recentemente
LIBELOLAOLV 06/02/2013 21:38:21
#418925
Poxa TS, muito obrigado mesmo pela atenção, mas eu pensei que seria algo mais simples... Até pq meu sistema possui somente 2 telas de cadastro. Mas muito obrigado de qualquer forma.
Fox, cara, eu coloquei da primeira maneira que você sugeriu, mas o VB diz que o AbrirCnnSQL não foi declarado. E pode não estar acessível devido ao nível de proteção... Mas fiquei com a pulga atrás da orelha pq todos os modificadores dele estão como Public... O que devo fazer?
FELLIPEASSIS 06/02/2013 22:19:39
#418926
tem esse app talvez ajude
Tópico encerrado , respostas não são mais permitidas