【问题标题】:System.Data.SqlClient.SqlException: 'Incorrect syntax near '('.'System.Data.SqlClient.SqlException:''('.' 附近的语法不正确。'
【发布时间】:2019-02-13 18:22:55
【问题描述】:

我正在尝试将数据插入到我的数据库中。我找不到任何原因为什么我的受影响结果为 0,并且它不断崩溃,让我在我的 cmd.ExecuteNonQuery() 上出现一个很大的波浪,它说'('附近有一个不正确的语法。所以我仔细分析了我的过去一个小时的sql语句,我不太确定问题出在哪里。

 private int SendData(string sqlStatement)
    {
        SqlConnection conn = new SqlConnection(Properties.Settings.Default.cnnString);
        SqlCommand cmd = new SqlCommand(sqlStatement, conn);

        int AffectedRecords = 0;
        using (conn)
        {
            conn.Open();
            AffectedRecords = cmd.ExecuteNonQuery();
            conn.Close();
        }
        return AffectedRecords;
    }

 private void InsertData()
    {



        string sql = string.Format("INSERT INTO Participant (LastName, FirstName, " + ("Country, Gender, IACMember, Rank, SponsorId" +
                                    "VALUES (\'{0}\',\'{1}\',\'{2}\',\'{3}\','{4}',{5}, {6})"),
                                    txtLastName.Text, txtFirstName.Text, cboCountry.SelectedItem, Gender(gender),
                                    (chkMember.Checked), ((txtRank.Text == string.Empty) ? "Null" : txtRank.Text),
                                    ((cboSponsor.Text == "No Sponsor") ? "Null" : cboSponsor.SelectedValue));


       SendData(sql);



    }

【问题讨论】:

  • 字段列表后缺少右括号,单引号前无需加\。但永远不要以这种方式编写 sql 命令。这是对周围任何想成为黑客的公开邀请。使用 Sql Injection 破解你的程序很容易
  • 如果您使用参数化 SQL,您将能够更清楚地看到问题 - 并且您的应用不会受到 SQL 注入的攻击。
  • @stuartd 你在说 command.Parameters.Add("@name", txtName.text);
  • @NickNickerson 就是这样,是的。
  • .. 然后声明变为var sql = "INSERT INTO Participant (LastName, FirstName, Country, Gender, IACMember, Rank, SponsorId VALUES (@LastName, @FirstName, @Country, @Gender, @IACMember, @Rank, @SponsorId)";,这使得更容易看到问题,并且您不必担心将Robert'); DROP TABLE Participant ;-- 作为您的值之一。

标签: c# ado.net


【解决方案1】:

为什么不以简单的方式插入数据呢?此外,您将自己暴露于SQL INJECTIONS。这是方法

private int InsertData()
    {
        int AffectedRecords = 0;
        using (SqlConnection con = new SqlConnection(Properties.Settings.Default.cnnString))
        {
            using (SqlCommand cmd = new SqlCommand("INSERT INTO Participant (LastName, FirstName, Country, Gender, IACMember, Rank, SponsorId) VALUES (@LastName, @FirstName, @Country, @Gender, @IACMember, @Rank, @SponsorId)", con))
            {
                con.Open();
                cmd.Parameters.AddWithValue("@LastName", txtLastName.Text);
                cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
                cmd.Parameters.AddWithValue("@Country", cboCountry.SelectedItem);
                //Your Remaining Fields
                AffectedRecords = cmd.ExecuteNonQuery();
            }
        }
        return AffectedRecords;
    }

【讨论】:

  • 我试过了,但是提示value关键字附近有错误
  • 这仍然缺少字段列表末尾的结束)
猜你喜欢
  • 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
相关资源
最近更新 更多