【问题标题】:Incorrect syntax near '455555' - When i try to search on database'455555' 附近的语法不正确 - 当我尝试搜索数据库时
【发布时间】:2015-06-29 16:03:44
【问题描述】:

我的表单上有一个搜索字段,我有两个单选按钮,一个称为 RG,另一个称为 NOME,基本上这些是搜索条件:按名称或按 RG。按名称搜索正常,但搜索 RG 返回错误。下面是代码。

                if (rdbPorRG.Checked) // Faz consulta com o RG
                {
                    if (txtPesquisar.Text == "")
                    {
                        MessageBox.Show("Favor escolher um parâmetro de busca \r\n" + "e preencher o campo de pesquisa \r\n" + "para efetuar a consulta.", "Consultar Item", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    else
                    {
                        txtPesquisar.ReadOnly = true;
                        CmSQL.Remove(0, CmSQL.Length);
                        CmSQL.Append("SELECT * FROM TB_CADASTRO ");
                        CmSQL.Append("WHERE RG = " + Convert.ToInt64(txtPesquisar.Text) + " ");
                        SDR = clsConexao.ExecutarDataReader(CmSQL.ToString());

                        if (!SDR.Read()) // Lê os dados resgatados e exibe para o usuário.
                        {
                            MessageBox.Show("RG não encontrado.", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); txtPesquisar.Clear(); txtPesquisar.Focus(); txtPesquisar.ReadOnly = false;
                            return;
                        }
                        else
                        {
                            DS = clsConexao.ExecutarDataSet("SELECT ID, RG, NOME, ITENS_DOADOS AS 'ITENS DOADOS' FROM TB_CADASTRO WHERE RG " + Convert.ToInt64(txtPesquisar.Text) + " "); // Seleciona TUDO que está na tabela aluno no Banco de Dados.
                            DT = DS.Tables[0]; // Extrai a tabela 0 do DATASET
                            dgvRegistros.DataSource = DT;
                            txtPesquisar.ReadOnly = false;
                        }
                    }
                }

【问题讨论】:

  • 强制“不要通过连接字符串来构建 SQL 查询,而是使用准备好的语句”,SQL 注入 yadiyadiya。你有没有费心去寻找错误?
  • 可能是 FROM TB_CADASTRO WHERE RG - 缺少 =,但也可以使用 SQL 参数,而不是字符串连接

标签: c# sql database syntax


【解决方案1】:

好像是这条线

DS = clsConexao.ExecutarDataSet("SELECT ID, RG, NOME, ITENS_DOADOS AS 'ITENS DOADOS' FROM TB_CADASTRO WHERE RG " + Convert.ToInt64(txtPesquisar.Text) + " ");

在其 where 子句中缺少“=”符号。试试

SELECT ID, RG, NOME, ITENS_DOADOS AS 'ITENS DOADOS' FROM TB_CADASTRO WHERE RG = " + Convert.ToInt64(txtPesquisar.Text) + " "

【讨论】:

  • 谢谢,确实是问题所在。解决了。但是当我回答这个问题时,我会尝试使用 SQL 参数来防止 SQL 注入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
相关资源
最近更新 更多