SQL Server表单输入带有撇号的字符串

时间:2015-08-10 06:37:21

标签: c# sql-server forms

我有一个C#表单应用程序,它链接到SQL服务器数据库。应用程序将查询中继到SQL服务器并相应地输入/输出数据。

出现的错误是当我尝试输入一个包含撇号的字符串时,例如输入"The dog's bone"

有没有办法输入这个,因为我不能要求用户总是按照许多人的建议输入双撇号。

这是我输入的查询:

Query = "INSERT INTO " + databaseNotes + " VALUES ('" + Release_Desc_txtBox.Text + "')";
constring = "Password=" + pass + ";Persist Security Info=True;User ID=" + user + ";Initial Catalog=" + catalog + ";Data Source=" + datasource;
// CONNECTION TO SQL SERVER DATABASE
SqlConnection conDataBase = new SqlConnection(constring);
SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase);
SqlDataReader myReader;

2 个答案:

答案 0 :(得分:2)

如果你想在SQL查询中以单引号{/ 3}}转义为

The dog''s bone

但我不推荐它。你也可以

使用this代替将自动处理这些单引号而不加倍。这种字符串连接对于you need to double them攻击是开放的。

同时使用parameterized queries自动处理您的SqlConnectionSqlCommand。据我所知,您不需要SqlDataReader,因为您只是尝试使用INSERT查询。

using(var conDataBase = new SqlConnection(constring))
using(var cmdDataBase = conDataBase.CreateCommand())
{
    // Set your CommandText property with parameters.
    // Add your parameters and their values with `Add()` method.
    // Open your connection.
    // Execute your query.
}

顺便说一下,既然您将表名作为输入,请在将其放入sql查询或进入白名单之前进行强有力的验证。我希望您的表名只有一组固定的可能的正确值。

答案 1 :(得分:1)

使用Prepared statements。这些更安全使用&还可以防止SQL注入攻击

https://en.wikipedia.org/wiki/Prepared_statement

或者你必须逃避用户输入。

但更好的解决方案是使用Prepared Statements