none
String de Conexão com campo numeric RRS feed

  • Pergunta

  • Tenho a seguinte string de conexão abaixo:

    string _strSQL04 = "SELECT * FROM ESPECIFICACAO WHERE CODPECA = '" + DropDownListCODPECA.Text + "' AND CODESP = '" + ESPTextBox.Text + "'";

    Que funciona perfeitamente com os campos nvarchar

    Eu quero acrescentar nessa string um campo numeric DIAM1.

    Como ficaria minha string de conexão ?

    Alguem pode me ajudar ?

    Obrigado

    sexta-feira, 15 de fevereiro de 2013 11:29

Respostas

  • Sim, porque o SQL utiliza pontos ao invés de vírgulas para separar as casas decimais. Então se você digitar campos decimais como "10,5" irá dar erro, mas se digitar "10.5" irá funcionar.

    Uma simples forma de resolver isso é substituindo as vírgulas por pontos, dessa forma:

    ".." + DIAM1TextBox.Text.Replace(',','.') + "..."


    Ao infinito e além!


    • Editado Fabio R. Luz sexta-feira, 15 de fevereiro de 2013 18:52
    • Sugerido como Resposta Afonso Fernandes sexta-feira, 15 de fevereiro de 2013 19:11
    • Marcado como Resposta ricardoti2012 segunda-feira, 18 de fevereiro de 2013 11:09
    sexta-feira, 15 de fevereiro de 2013 18:52

Todas as Respostas

  • Ok vamos lá, você está confundindo uma coisa, isso que você tem ai não é uma string de conexão, e sim uma instrução SQL. Instruções SQL são comandos que são enviados para o banco de dados, podendo retornar, deletar, editar ou inserir informações. String de conexão é uma string que contém "o caminho" do banco, com usuário e senha e tal.

    Agora vamos ao seu problema, para você colocar uma "string" em um sql ele deve ser colocado entre apóstrofos, em programação o pessoal costuma chamar isso de "aspas simples", exemplo:

    SELECT * FROM Clientes WHERE Nome = 'João'

    Repare que João foi colocado entre aspas simples.

    Se você quer colocar um campo que seja igual a um "numero", "numeric" no seu caso, daí não se usa aspas simples, exemplo:

    SELECT * FROM Clientes WHERE CodCliente = 12

    Repare que 12 não tem aspas simples!

    -----------

    Vou aproveitar essa ocasião para te dizer, nunca faça isso que está fazendo, você está concatenando (somando palavras) instruções SQL. Isso não é recomendando, pois como você está pegando o valor diretamente da caixa de texto, o usuário poderia digitar alguma coisa, que influêncie na sua instrução SQL (processo chamdo de SQL Injection). O ideal é sempre utilizar parâmetros SQL.

    De uma lida nesses links:

    SQL Injection http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL

    Trabalhando com parâmetros em SQL http://www.macoratti.net/09/07/c_adn_7.htm


    Ao infinito e além!


    sexta-feira, 15 de fevereiro de 2013 11:38
  • Sim eu escrevi errado e uma instrução sql mas não é no banco de dados SQL e sim no Visual Studio 2010 em C#

    string _strSQL04 = "SELECT * FROM ESPECIFICACAO WHERE CODPECA = '" + DropDownListCODPECA.Text + "' AND CODESP = '" + ESPTextBox.Text + "'";

    Então como ficaria em C# acrescentar 2 campos de forma que fique conforme o que eu vou indicar abaixo:

    TextBoxDiam.text >= DIAM1 AND TextBoxDiam.Text <= DIAM2

    Repare que estou usando um TextBox e comparando ele com 2 campos na tabela SQL.

    Aguardo retorno.

    Obrigado 

    sexta-feira, 15 de fevereiro de 2013 11:47
  • string _strSQL04 = "SELECT * FROM ESPECIFICACAO WHERE CODPECA = '" + DropDownListCODPECA.Text + "' AND CODESP = '" + ESPTextBox.Text + "' AND DIAM1 <= " + TextBoxDiam.text + " AND DIAM2 >= " + TextBoxDiam.Text;

    Neste caso, ao concatenar os valores de TextBoxDiam você não deve usar aspas simples. O que você deve estar fazendo é:

    "..... '" + TextBoxDiam.Text + "' ...."

    Mas o correto seria:

    ".... " + TextBoxDiam.Text + " ...."
    Isso porque TextBoxDiam.Text será usado em um cálculo numérico, sendo assim não pode ter ' ' antes.


    Ao infinito e além!


    • Editado Fabio R. Luz sexta-feira, 15 de fevereiro de 2013 12:41
    • Sugerido como Resposta Afonso Fernandes sexta-feira, 15 de fevereiro de 2013 13:10
    sexta-feira, 15 de fevereiro de 2013 12:40
  • A string ficou dessa forma com a ajuda do Fabio.

    string _strSQL04 = "SELECT * FROM ESPECIFICACAO WHERE CODPECA = '" + DropDownListCODPECA.Text + "' AND CODESP = '" + ESPTextBox.Text + "' AND DMENOR1 <= " + DIAM1TextBox.Text + " AND DMAIOR1 >= " + DIAM1TextBox.Text;

    Porem quando digito numeros com casas decimais exemplo = 2,5 da erro abaixo.

    Server Error in '/' Application.

    Incorrect syntax near ','.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near ','.

    Source Error: 
    Line 171:            {
    Line 172:                con04.Open();
    Line 173:                SqlDataReader dr04 = cmd04.ExecuteReader();
    Line 174:                if (dr04.Read())
    Line 175:                {

    Source File: c:\WebSGO\WebSGO\WebApplication1\Spool.aspx.cs    Line: 173 

    sexta-feira, 15 de fevereiro de 2013 16:30
  • Sim, porque o SQL utiliza pontos ao invés de vírgulas para separar as casas decimais. Então se você digitar campos decimais como "10,5" irá dar erro, mas se digitar "10.5" irá funcionar.

    Uma simples forma de resolver isso é substituindo as vírgulas por pontos, dessa forma:

    ".." + DIAM1TextBox.Text.Replace(',','.') + "..."


    Ao infinito e além!


    • Editado Fabio R. Luz sexta-feira, 15 de fevereiro de 2013 18:52
    • Sugerido como Resposta Afonso Fernandes sexta-feira, 15 de fevereiro de 2013 19:11
    • Marcado como Resposta ricardoti2012 segunda-feira, 18 de fevereiro de 2013 11:09
    sexta-feira, 15 de fevereiro de 2013 18:52