none
Problema na Execução de Comando Sql no Windows Mobile RRS feed

  • 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

     

    segunda-feira, 30 de outubro de 2006 14:13

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

    sexta-feira, 5 de janeiro de 2007 11:53

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("coditem",mCodItem))

    .Add(new sqlserverce.sqlceparameter("descricao",mDescricao))

    etc...

    End With

    cmd.prepare()

    cmd.ExecuteNonQuery()

     

    Espero que isto ajude...eu uso assim sem problemas.

    quinta-feira, 14 de dezembro de 2006 15:50
  • 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 SqlCeCommand

    cmd.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

    quarta-feira, 3 de janeiro de 2007 12:49
  • 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

    quinta-feira, 4 de janeiro de 2007 01:05
  • 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...

    quinta-feira, 4 de janeiro de 2007 13:06
  • 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

    sexta-feira, 5 de janeiro de 2007 11:53
  • 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

    sexta-feira, 5 de janeiro de 2007 12:35
  • Bom dia Daniel,

    Muuuiiito obrigada meeesmo!!! Parece que funcionou!!!!

    Valeuz!!!!

    abraços...

    sexta-feira, 5 de janeiro de 2007 13:47