在SQL查询中转义值(带有SQL连接器的C#)

时间:2010-01-07 12:56:06

标签: c# mysql escaping

我知道我可以使用参数,但是什么是转义字符串序列的正确方法? 查询可以是这样的:

"INSERT INTO records (ReferenceID,Name,Note,Author) VALUES ('" + ID+ "','" + addlevel.textBox1.Text + "','"+addlevel.textBox2_note.Text+ "','"+Program.Username+"')";

我只是好奇,只想知道:)

编辑: 那怎么样? “CREATE TABLE”+ string“......参数不能在这里使用!

5 个答案:

答案 0 :(得分:16)

如果需要执行数据库操作,例如创建表,则应使用SQL Server Management Objects而不是执行SQL字符串。

对于CRUD操作,参数绝对是唯一的真实路径。

更新:似乎MySQL客户端库包含一个帮助这种不明智的任务的方法。您可以调用MySqlHelper.EscapeString(string)。

答案 1 :(得分:14)

正确的方式 使用参数。

“Just Say No”试图逃避自己 - 这很容易出错。为什么你认为你希望手动转义它们而不是使用参数?

答案 2 :(得分:7)

如果你真的,真的,真的需要自己逃避(在你的例子中没有迹象):

string EncodeMySqlString(string value) {
   return value.Replace(@"\", @"\\").Replace("'", @"\'")
}

答案 3 :(得分:0)

我认为您唯一需要做的就是value = value.Replace("'", "''")

当然你不应该这样做,但你知道。

编辑:显然这对MySQL来说完全没错。它应该适用于PostgreSQL,MS SQL和Oracle。

答案 4 :(得分:0)

use commnd parameters instead. It takes care of escaping itself. It's the solution also against sql injections.