我有一个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;
答案 0 :(得分:2)
如果你想在SQL查询中以单引号{/ 3}}转义为
The dog''s bone
但我不推荐它。你也可以
使用this代替将自动处理这些单引号而不加倍。这种字符串连接对于you need to double them攻击是开放的。
同时使用parameterized queries自动处理您的SqlConnection
和SqlCommand
。据我所知,您不需要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