1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C# - Dúvida - RESOLVIDO !!!!

Discussão em 'Programação' iniciada por hugolini, 3 de Abril de 2009. (Respostas: 13; Visualizações: 1921)

  1. hugolini

    hugolini Banido

    Boas,

    Tenho uma dúvida em C# que espero que me consigam ajudar:

    Tenho uma TextBox que contem um NUMERO INTEIRO (sob a forma de texto).
    Quero passar o valor dessa mesma TextBox para uma base de dados ACCESS, em que esse campo é INTEIRO.
    Mas recebo um erro, legítimo diga-se, em que os tipos não são idênticos.

    string strSQL = "UPDATE proprietarios SET Nome = "
    + "'"
    + Convert.toInt32(txt3.Text)

    Tentei fazer um Convert mas não deu ....

    Alguma ajuda sff?
     
    Última edição: 4 de Abril de 2009
  2. nelsondac

    nelsondac Power Member

    talvez seja mais facil criares uma variavel inteira e passar o número com int32.parse. por exemplo:

    int numinteiro = Int32.Parse(txtbox.text);

    tenho ideia que era assim que fazia. outra coisa, no campo da SQL os nomes (variaveis tipo string e derivados) devem estar dentro de '<texto>'

    não sei se é melhor ou não, mas sempre me dei melhor com as querys assim:


    string strSQL = string.Format("UPDATE proprietarios SET Nome = '{0}' WHERE numProprietario = {1}", variavelNome, variavelNumero)

    já agora, verifica se tens essa query UPDATE bem construida. já que faltam dados.
    atenção que fiz isto a olho, não testei e a query fui buscar ao google. qq coisa vai dizendo. fkb
     
  3. S0ul

    S0ul Power Member

    Não é através do convert, mas sim através de um parse que passas a string a inteiro :). Tipo int.parse(txtbox.text).
    Alias o exemplo do nelsondac :).
     
  4. Granadafeup

    Granadafeup Power Member

    Se vais inserir a linha por query porque razão estas sequer a converter no C# o texto para inteiro? Se fosse um Typed DataSet percebia, mas por comando não há razão nenhuma para realizares essa converção

    Código:
    string strSQL = "UPDATE proprietarios SET Nome = " 
                    + "'" + txt3.Text + "' Where ID = 12321"
     
    Outra coisa que não estou a perceber, tens uma coluna chamada 'Nome' que só aceita inteiros?
     
  5. hugolini

    hugolini Banido

    O código todo é o seguinte:

    string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\\gdpi\\gdpi.mdb";
    string strSQL = "UPDATE proprietarios SET Nome = "
    + "'"
    + txt3.Text + "' ," + "Titulo = " + "'" + txt2.Text
    + "' ," + "Morada = " + "'" + txt4.Text
    + "' ," + "Localidade = " + "'" + txt5.Text
    + "' ," + "CodigoPostal = " + "'" + txt6.Text
    + "' ," + "Cidade = " + "'" + txt8.Text
    + "' ," + "Pais = " + "'" + txt9.Text
    + "' ," + "NIF = " + "'" + txt10.Text
    + "' ," + "Telefone = " + "'" + txt11.Text
    + "' ," + "Mail = " + "'" + txt12.Text
    + "'WHERE CodProprietario = "
    + "'"
    + int.Parse(txt1.Text) /// aqui vinha txt1.Text, contem um numero em string que quero meter na BD como numerico
    + "';";

    Mas não funcionou, continua a dar a mensagem de data type mismatched, algum erro?
    Se eu modificar o campo na BD de numérico para texto funciona.
     
  6. Granadafeup

    Granadafeup Power Member

    Não estarás a tentar concatenar uma string com um inteiro ?
     
  7. S0ul

    S0ul Power Member

    Talvez se tirasses as plicas percebias o que estás a fazer de mal, tipo estás a fazer -> "'WHERE CodProprietario = "
    + "'"
    + int.Parse(txt1.Text), isto é where codproprietario = '1' :s. Tiralhe as plicas.
     
  8. nelsondac

    nelsondac Power Member

    estas a falar de criar uma variavel inteira só para ter o tal ID ?

    é só uma questão de ser mais facil perceber. claro que se pode meter logo directo mas eu pelo menos gosto de separar as coisas. fkb
     
  9. Granadafeup

    Granadafeup Power Member

    Primeiro quero pedir desculpa visto que, eu pensava que o operador + do String não tinha overload com Int32. Pelos vistos estava enganado.... :S


    Eu não estava a dizer para criar uma váriavel inteira, simplesmente acho desnecessário fazer a conversão Texto -> Numerico -> Texto, visto a query (variavel strSql) ser um String.
     
  10. nelsondac

    nelsondac Power Member

    se o campo na base de dados for como valor inteiro, convém mandar na query como inteiro. falo porque já tive problemas com isso.
    quanto a variavel em si, sim pode, eu só uso por uma questão de me orientar, ou por vezes que preciso do mesmo valor. são as tais "teimas" do programador :P

    fkb boa sorte no trabalho
     
  11. peço desculpa pelo hijack à thread. mas também estou a usar C# para aceder a uma base de dados em Access 2007 (para ser mais correcto, a minha base de dados ta em postgreSQL e o access funciona como front-end via ligação ODBC).
    Conseguir criar uma ligação à base de dados em access via C#, mas ainda não entendi como faço uma query a uma tabela. Vi alguns exemplos online com access 2003 em que se fazia usava os seguintes comandos

    OleDbCommand cmd = new OleDbCommand(sSql, conn);
    OleDbDataReader dr = cmd.ExecuteReader();

    (conn é a conecção à BD)

    mas estou sem sorte com o access 2007 e ainda, queria saber como apresentar os resultados numa datagridview.

    Alguem me pode dar umas indicações?

    Agradecimentos.
    High
     
  12. nasic

    nasic Power Member

    Aqui tens um exempo:
    Código:
    public void ReadMyData(string myConnString) 
    {
       [B]string mySelectQuery = "SELECT OrderID, CustomerID FROM Orders";[/B]
       OleDbConnection myConnection = new OleDbConnection(myConnString);
      [B] OleDbCommand myCommand = new OleDbCommand(mySelectQuery,myConnection);[/B]
       myConnection.Open();
       OleDbDataReader myReader = myCommand.ExecuteReader();
       try 
       {
         while (myReader.Read()) 
        {
           Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
        }
       }
          finally 
       {
        // always call Close when done reading.
        myReader.Close();
        // always call Close when done reading.
        myConnection.Close();
     }
    }
    
    Este código que postei apenas afectua a query e mostra os resultados dessa mesma query.
    Pesquisa um pouco pelo google como preenches o datagridview. Mas é muito simples:P
     
  13. Obrigado pela resposta.

    Realmente era isso mesmo que estava a fazer. mas tava a dar erro. Afinal era por tar a usar o Sharp develop em vez do Visual Studio (apesar de gostar de applicações open source, o sharp develop ainda tem algumas falhas).
    Troquei para Visual studio, e funcionou à primeira.

    Cumps,
    High
     
  14. hugolini

    hugolini Banido

    É isso mesmo que estava errado !!!!!

    Um mt obrigado a ti e a todos que tentaram ajudar ... às vezes as coisas são tão simples e ao mesmo tempo tão complicadas.

    :p

    Tnks a todos
     

Partilhar esta Página