Usuário com melhor resposta
Problema na Execução de Comando Sql no Windows Mobile

Pergunta
-
Caros Colegas,
Estou com problema, tem uma tabela itens com 17 campos, na hora que vou
montar a query para ser executada ele da o seguinte erro:"The column name is not valid. [ Node name (if any) = ,Column name =
codpro5 ]"
Se eu remover o campo codpro5 da query ele passa a dar erro no proximo
campo, existe alguma limitação com relação ao tamanho de um comando a ser
executado ?Segue o comando abaixo:
cmd.CommandText = "insert into itens (coditem, descricao, grupo, preco1,
preco2, un, obslivro, codpro1, codpro2, codpro3, codpro5, diaspreco1,
diaspreco2, tptabela, tpcomis) " _& "values ( @coditem, @descricao, @grupo, @preco1, @preco2, @un, @obslivro,
@codpro1, @codpro2, @codpro3, @codpro5, @diaspreco1, @diaspreco2, @tptabela,
@tpcomis)"With cmd.Parameters
.Add("@coditem", SqlDbType.NVarChar, 5).Value = mCodItem
.Add("@descricao", SqlDbType.NVarChar, 50).Value = mDescricao
.Add("@grupo", SqlDbType.NVarChar, 30).Value = mGrupo
.Add("@preco1", SqlDbType.Money).Value = mPreco1
.Add("@preco2", SqlDbType.Money).Value = mPreco2
.Add("@un", SqlDbType.NVarChar, 3).Value = mUn
.Add("@obslivro", mObsLivro)
.Add("@codpro1", SqlDbType.NVarChar, 5).Value = mCodpro1
.Add("@codpro2", SqlDbType.NVarChar, 5).Value = mCodpro2
.Add("@codpro3", SqlDbType.NVarChar, 5).Value = mCodpro3
.Add("@estoque", mEstoque)
.Add("@codpro4", SqlDbType.NVarChar, 5).Value = mCodpro4
.Add("@codpro5", SqlDbType.NVarChar, 5).Value = mCodpro5
.Add("@diaspreco1", SqlDbType.Int).Value = mDiasPreco1
.Add("@diaspreco2", SqlDbType.Int).Value = mDiasPreco2
.Add("@tptabela", SqlDbType.NVarChar, 1).Value = mTpTabela
.Add("@tpcomis", SqlDbType.NVarChar, 1).Value = mTpComis
End With
cmd.ExecuteNonQuery()
Desde já agradeço a valiosa ajuda.Marco Aurélio V. da Silva
Respostas
-
Bom dia
//Se você criou um objeto SqlCeConnection, deverá informar ao outro objeto (SqlCeCommand) que a sua propriedade Connectio é igual a ele
sqlCeCommand.Connectio = sqlCeConnection
//Agora, acredito que outra maneira de fazermos isso e alterando a linha do construtor
Dim sqlCeConnetion As New SqlCeConnection
//para
Dim sqlCeConnetion As sqlCeConnection.CreateCommand()
OBS: referencias acima começadas com letra minuscula, são objetos. Em maiúscula, são as classes.
Vamos ver se funciona?
Abraço
Todas as Respostas
-
Boas.
Devias fazer da seguinte forma:
cmd.parameters.clear()
cmd.commandtype=commandtype.text
cmd.CommandText = "insert into itens (coditem, descricao, grupo, preco1,
preco2, un, obslivro, codpro1, codpro2, codpro3, codpro5, diaspreco1,
diaspreco2, tptabela, tpcomis) values ( ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?,?)"With cmd.Parameters
.Add(new sqlserverce.sqlceparameter("descricao",mDescricao))
etc...
End With
cmd.prepare()
cmd.ExecuteNonQuery()
Espero que isto ajude...eu uso assim sem problemas.
-
Olá!
Eu estava com o mesmo problema do nosso colega, e tentei fazer como vc descreveu.
Só que agora o erro é outro:
Prepare: Connection property has not been initialized
O codigo que estou utilizando é o seguinte:
Try
Conn =
New Data.SqlServerCe.SqlCeConnection(conexao)Conn.Open()
MessageBox.Show(
"Conexão estabelecida com sucesso") Dim cmd As New SqlCeCommandcmd.Parameters.Clear()
cmd.CommandType = Data.CommandType.Text cmd.CommandText = "INSERT INTO controle(pintura, bebedouros)VALUES (" & pintura.Text & "," & bebedouros.Text & ")"With cmd.Parameters
.Add(New Data.SqlServerCe.SqlCeParameter("pintura", pintura.Text))
.Add(New Data.SqlServerCe.SqlCeParameter("bebedouros", bebedouros.Text))
End With
cmd.Prepare()
cmd.ExecuteNonQuery()
MessageBox.Show("Registro realizado com sucesso")
Conn.Close()
Conn.Dispose()
Catch ex As Exception
MessageBox.Show("Erro: " & ex.Message)
End Try
Será que vc poderia me dar uma forcinha?!?! =D
grata
-
Boa noite.
Não sei se é esse o problema, mas, você esta concatenando os valores a sua query e adicionando parametros também. Faça somente um dos dois. Repare nos pontos de interrogação colocados no post anterior. Não sei se sabe, mas em todo caso, cada interrogação representa o recebimento de um parametro.
Veja
cmd.CommandText = "INSERT INTO controle(pintura, bebedouros)VALUES (?,?)"
With cmd.Parameters
.Add(New Data.SqlServerCe.SqlCeParameter("pintura", pintura.Text))
.Add(New Data.SqlServerCe.SqlCeParameter("bebedouros", bebedouros.Text))
Até que parte seu código é executado? Percebi que colocou alguns alertas. Ele mostra até qual mensagem?Abraço
-
Olá Daniel,
Como sou iniciante, realmente eu não sabia dos pontos de interrogação. Eu alterei no meu codigo, mais mesmo assim continuo com o mesmo erro.
Prepare: Connection property has not been initialized
Ou seja, ele passa pelo With e quando chega no Prepare() ele dá esse erro que eu citei acima. O que seria??
Obrigada...
-
Bom dia
//Se você criou um objeto SqlCeConnection, deverá informar ao outro objeto (SqlCeCommand) que a sua propriedade Connectio é igual a ele
sqlCeCommand.Connectio = sqlCeConnection
//Agora, acredito que outra maneira de fazermos isso e alterando a linha do construtor
Dim sqlCeConnetion As New SqlCeConnection
//para
Dim sqlCeConnetion As sqlCeConnection.CreateCommand()
OBS: referencias acima começadas com letra minuscula, são objetos. Em maiúscula, são as classes.
Vamos ver se funciona?
Abraço
-
Olá, vou tentar dar a minha sugestão tbm :
olha esse artigo :
http://samples.gotdotnet.com/quickstart/CompactFramework/doc/sqlceparameterizedquery.aspx
e perceba que o ideal é voce preencher TODOS os valores necessários na hora de incluir um SqlCeParameter.insertCommand.Parameters.Add(new SqlCeParameter("l_name", SqlDbType.NText,50)); // certifique-se de ter colocado TODOS os parametros nesse método Add
chame o .Prepare() ANTES de começar a atribuir os valores aos parametros, e certifique-se que a conexão esteja aberta
Depois em um loop voce atribui os valores, e executa .
Abraços
Julio Tsukamoto -