PROBLEMA COM EXECUTE NONQUERY

LIBELOLAOLV 21/08/2013 01:36:49
#427873
Olá galera, estou tendo dificuldades numa rotina de inclusão de clientes. Ocorre que, quando peço para salvar tenho a seguinte mensagem: ExecuteNonQuery: Propriedade Connection não foi inicializada. O que posso ter feito de errado? ou o que deixei de fazer?

Estou há mais de 5 meses com um projetinho parado por conta de problemas com conexão... arrumei algumas coisas mas outros erros como esse persistem.

segue meu modulo com a conexão e string declarada

Module mdlProjeto
Public cnnSql As New SqlClient.SqlConnection
Public strSql As String


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=Fabricio-PC\SQLEXPRESS;[Ô] & _
[Ô]User Id=Fabricio-PC\Fabricio; 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
End Module

e abaixo, toda a rotina do botão Gravar depois da consistencia de dados.

If blnInserir = True Then

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

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

Else

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

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


End If

cnnSql = AbrirCnnSQL()
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()
btnLimpar_Click(sender, e)
Atualizar_datagrid()
Cadastro_Cliente_Load(sender, e)


Grato, desde já.
ASHKATCHUP 21/08/2013 01:58:14
#427874
Só de curioso: tu já tentou eliminar a variável cnnSql e setar direto a propriedade?


cmdCliente.Connection = AbrirCnnSQL()
LIBELOLAOLV 22/08/2013 00:38:48
#427922
Como assim cara? Desculpe, sou NUUB mesmo!

Se eu eliminar a cnnSql não vai ter onde eu atribuir o resultado da conexão... pelo menos não da forma que está em meu código.
FELLIPEASSIS 23/08/2013 12:23:34
#428006
aq tem um exemplo
FILMAN 23/08/2013 14:25:36
#428017
Resposta escolhida
Somente lembrando a todos que aqui não é um fórum somente para constituir ponto para mostrar que sabe alguma coisa!
A intensão é ajudar ao próximo tirando suas duvidas e não passando uma instrução pronta para que a pessoa copie e cole!

Vamos propor o conhecimento e não simplesmente entregar pronto, pois a sua maneira de identificar um problema e corrigi-lo no sistema é diferente da do outro!

Primeiro
Erro que todos cometem ao migrar de uma linguagem vb6 para vb.net é usar expressões de vb6 no vb.net! quere programar e plataforma .net esquece as outras!
Err.Description.ToString não é utilizado

Try e Catch portanto se queres mostrar a mensagem de erro quando cair no Catch faça o seguinte

MessageBox.Show([Ô]Ocorreu um erro: [Ô] & vbNewLine & [txt-color=#e80000]ex.Message[/txt-color], _
[Ô]Erro ao Gravar[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error)



Segundo
Para trabalhar com procedure não utiliza-se dessa maneira veja o site abaixo e tenha uma base de como fazer

http://www.macoratti.net/vbn_bsql.htm



Não quero que ninguém leve a mal minha palavras, mas entregar pronto não vai ajudar a pessoa desenvolver as habilidades de programador/analista.

Espero ter ajudado
Tópico encerrado , respostas não são mais permitidas