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

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:
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
 
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 :).
 
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?
 
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.
 
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.
 
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?

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

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

É 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
 
Back
Topo