【问题标题】:System.Data.SqlClient.SqlException: 'incorrect syntax near 'table'.'System.Data.SqlClient.SqlException:''表'附近的语法不正确。'
【发布时间】:2018-03-03 05:29:23
【问题描述】:

我正在尝试使此代码正常工作,但每次调试时都会遇到此错误。

这是我的代码:

private void button3_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(ConnectionString);

    SqlDataAdapter sda = new SqlDataAdapter($"Select Count(*) from Table Where 'Utilizador=' '{textBox1.Text}' and Passe='{textBox2.Text}'", selectConnection: con);

    DataTable dt = new DataTable();
    sda.Fill(dt);

    if (dt.Rows[1][2].ToString() == "1")
    {
        this.Hide();

        Form2 ss = new Form2();
        ss.Show();
    }
    else
    {
        MessageBox.Show("Utilizador e/ou Palavra Passe errados. Caso o erro pressista contacte o administrador de sistema.", "SiGiG - Alerta");
    }
}

错误是

System.Data.SqlClient.SqlException: 'table' 附近的语法不正确。'

并在这行代码中抛出:

sda.Fill(dt);

感谢我能得到的所有帮助,对我的英语感到抱歉。

【问题讨论】:

  • 你是说你有一个名为“table”的表吗?如果是这样,请尝试在其周围加上方括号。例如。 [表格]。
  • Table 是 Sql Server 的保留关键字。如果您确实有一个具有该名称的表(坏主意),您应该在查询中用方括号将其写在它周围
  • 修复这个小错误后,请注意您的查询容易受到sql injection的攻击。使用参数,不要将用户输入的内容直接放在查询中
  • 不要“尝试用方括号括起来”; Table 是 SQL 表的错误名称,请将名称更改为有意义的名称。
  • 您不会从该查询中得到三列和两行。我真的建议你阅读更多关于 SQL 和 ADO.NET 的文档。

标签: c#


【解决方案1】:

这是来自 SQL 引擎的错误,很可能是由 table 关键字引起的。不建议使用关键字作为表名。但是,如果您想使用它,请使用方括号,如下所示: 从 [Table] 中选择 Count(*) 你会找到相关的解释here

您还需要删除 Utilizador= 周围的单引号。

此外,dt.Rows[1 ][2] 将返回第二行和第三列的值。在您的情况下,您需要: dt.Rows[0][0]

【讨论】:

  • 至少补充一句,他应该使用 ExecuteScalar 并解释原因。
猜你喜欢
  • 2021-03-31
  • 2019-07-17
  • 2017-12-08
  • 2014-05-09
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多