执行INSERT时出现SQL错误:'s'附近的语法不正确

问题描述 投票:-1回答:2

我正在尝试创建一个Windows表单,当我在数据库中键入并单击提交时,将数据插入数据库。它适用于简短的事情,但是当我尝试键入一些较长的句子时,它表示为:

enter image description here

这是代码:

private void SubmitButton_Click(object sender, EventArgs e)
{
    con.Open();
    cmd = new SqlCommand("INSERT INTO Jokes VALUES('" + EnterJoke.Text + "', '" + EnterAnswer.Text + "')", con);

    cmd.ExecuteNonQuery();

    MessageBox.Show(" Data Has Been Saved In Database ");
    con.Close();
}

我在此行得到错误:

cmd.ExecuteNonQuery();
c# sql-server database-connection
2个回答
0
投票

输入文本必须具有特殊的字符标点符号,因为您的代码正在执行普通串联,因此不能将其作为文字文本的一部分。

尝试下面的代码修复两个问题:

  1. 最重要的是SQL注入漏洞。
  2. 第二,您的问题(如果它与带有特殊字符的输入字符串有关)
    private void SubmitButton_Click(object sender, EventArgs e)
    {
        SqlParameter joke = new SqlParameter();
        joke.ParameterName = "@joke";
        joke.SqlDbType = SqlDbType.VarChar;
        joke.Value = EnterJoke.Text;

        SqlParameter answer = new SqlParameter();
        answer.ParameterName = "@answer";
        answer.SqlDbType = SqlDbType.VarChar;
        answer.Value = EnterAnswer.Text;

        cmd = new SqlCommand("INSERT INTO Jokes VALUES(@joke, @answer)", con);    
        cmd.Parameters.Add(joke);
        cmd.Parameters.Add(answer);

        con.Open();
        cmd.ExecuteNonQuery();

        MessageBox.Show(" Data Has Been Saved In Database ");
        con.Close();
    }

-1
投票

您在文本中转换还是使用‘如果要转换sql,则将其视为攻击。

© www.soinside.com 2019 - 2024. All rights reserved.