none
passando parametro no SQL (Postgres) em C# RRS feed

  • Pergunta

  • estou encontrando erro quando utilizo o comando Paramenters.AddWithValue no postgres (ODBC) em c#..

    por enquanto estou tentando fazer o INSERT e faço como o xemplo abaixo:

                    OdbcCommand cmd = new OdbcCommand ();

                    cmd.Connection = cn;

                    cmd.CommandText = "insert into tbPessoa(nome) values (@nome)";

                    cmd.Parameters.AddWithValue("@nome", teste);

    minha conexão abre normalmente, só que eu não consigo concluir a insersão pois ocorre um erro dizendo que a tabela, ou alguma coluna da tabela não existe..

    porém, se eu não fizer a inserção utilizando parametros, fizer direto.. não ocorre erro, como abaixo..

                    cmd.CommandText = "insert into tbPessoa(nome) values (teste)";

     

    Imagino que a passagem de parametros está errada, ao inves do @, seja outro caracter, mais qual? Eu já tentei @, ?, #.. não funciona.. sempre da o mesmo erro.. Preciso de uma alternativa pra realizar os meus SQL sempre com a passagem de parametro.. alguém sabe me dizer como seria utilizado Postres (ODBC) e C#?

     

    quinta-feira, 18 de agosto de 2011 12:29

Respostas

  • tente fazer assim:

    insert into tbPessoa(nome) values (?);
    
    cmd.Parameters.Add("@nome", OdbcType.VarChar, 80).Value = teste;


    Teste tem de ser uma váriavel do tipo string

    é bom ver o tipo da coluna e o tamanho estão corretos

    veja tb se essa é a unica coluna obrigatoria da tabela


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta kngipa quinta-feira, 18 de agosto de 2011 21:25
    quinta-feira, 18 de agosto de 2011 13:34

Todas as Respostas

  • tente fazer assim:

    insert into tbPessoa(nome) values (?);
    
    cmd.Parameters.Add("@nome", OdbcType.VarChar, 80).Value = teste;


    Teste tem de ser uma váriavel do tipo string

    é bom ver o tipo da coluna e o tamanho estão corretos

    veja tb se essa é a unica coluna obrigatoria da tabela


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta kngipa quinta-feira, 18 de agosto de 2011 21:25
    quinta-feira, 18 de agosto de 2011 13:34
  • postarei a  noite se deu certo ou não..

    passe por aqui pra ver minha resposta ;]

    obrigada!

    quinta-feira, 18 de agosto de 2011 13:39
  • Olavo, você já utilizou este comando?

    Fiz um teste e o erro parou de ocorre, mas não está gravando nenhum dado no banco..

    outa coisa.. o campo em negrito, é utilizado com o @ mesmo?

    insert into tbPessoa(nome) values (?);
    cmd.Parameters.Add("@nome", OdbcType.VarChar, 80).Value = teste;

    e me diz, tem alguma forma de usar esse mesmo código sem ter que informar os campos em itálico sublinado acima?

    quinta-feira, 18 de agosto de 2011 16:09
  • SIm,veja do próprio site da Microsoft http://msdn.microsoft.com/pt-br/library/system.data.odbc.odbcparameter.aspx

    tem, mas não é muito recomendado.

    quando você executa o executeNonQuery, nenhum erro é retornado ? 


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    quinta-feira, 18 de agosto de 2011 16:26
  • não ocorre nenhum erro.. ele acaba de executar essa etapa normalmente..

    acredito que possa ser algum erro no código.. pois fiz um teste rápido em um código em um código que não conhecia.. mas em casa vou testar diretamente no meu e posto novamente..

    adiantei este post, pois fiquei com dúvida se poderia ser alguma coisa relacionada ao @ na linha do parametro e o ? do insert.. e também porque gostaria de saber se posso passar só o valor do parametro sem ter que ficar informando de que tipo e tamanho..

    não sei o que diz as boas práticas de programação, mas acho pior ter que informar o tipo e o tamnho nesta linha..

    só a nível de conhecimento, como seria se fosse passar o valor sem informar o tipo e o tamanho?

    quinta-feira, 18 de agosto de 2011 16:46
  • Kyrla, se você der uma lida aqui http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx no original em inglês você poderá ver que o AddwithValue não é recomendado pois causa ambuiguidade com os dados a serem inseridos. especicar o tamanho da coluna nem sempre é necessário, mas o tipo é uma boa recomendação
    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    quinta-feira, 18 de agosto de 2011 17:26
  • na verdade este post que vc sugeriu em inglês, ele mostra exatamente o que está o meu código hoje:

    post: command.Parameters.AddWithValue("@demographics", demoXml);

    meu codigo: cmd.Parameters.AddWithValue("@nome", teste);

    e eu estou encontrando erro ao informar os dados assim.. vou ter que usar o que você sugeriu mais acima mesmo.. eu vi que só Add tem 4 formas de utilizar, uma delas, me pareceu passando só o valor.. mas fiz um teste rápido com o código abaixo e deu erro..

    insert into tbPessoa(nome) values (?);
    cmd.Parameters.Add("teste");

    ter que informa tipo e tamanho para todos os parametros, pode deixar o serviço mais longo, já que será mais uma preocupação com o tipo e principalmente, o tamanho do campo informado no banco..

    vou realizar alguns testes mais tarde e posto o resultado aqui..

    por enquanto, obrigada!

     

     

    quinta-feira, 18 de agosto de 2011 18:09
  • deu certo..

    obrigada!

    []s!

    quinta-feira, 18 de agosto de 2011 21:27