Php .NET Framework中的mysql\u real\u escape\u string()

Php .NET Framework中的mysql\u real\u escape\u string(),php,.net,mysql,sql-server,escaping,Php,.net,Mysql,Sql Server,Escaping,我想在.NET framework中找到一个函数,调用SQL Server的库来转义发送到SQL Server的值,就像在PHP中调用MySQL的库一样。 请提出一个方法,我可以调用它,它通过一次到数据库的往返返回转义字符串,而不需要执行它的查询 有吗?你为什么要这么做?向数据库发送用户输入的正确方法不是转义,而是使用 这提供了更好的性能,因为查询文本总是相同的,因此可以缓存查询执行计划。这还可以防止SQL注入攻击。它还允许您忽略数据格式化问题(例如,在SQL Server中如何格式化日期时间?

我想在.NET framework中找到一个函数,调用SQL Server的库来转义发送到SQL Server的值,就像在PHP中调用MySQL的库一样。
请提出一个方法,我可以调用它,它通过一次到数据库的往返返回转义字符串,而不需要执行它的查询

有吗?

你为什么要这么做?向数据库发送用户输入的正确方法不是转义,而是使用


这提供了更好的性能,因为查询文本总是相同的,因此可以缓存查询执行计划。这还可以防止SQL注入攻击。它还允许您忽略数据格式化问题(例如,在SQL Server中如何格式化日期时间?在SQL中如何表示数字?等等)

Btw:mysql\u real\u escape\u字符串不会以任何方式与数据库通信。另外:@Thomas提出的解决方案很好,就像准备好的语句也是一种方法一样php@edorian-mysql\u real\u escape\u string()实际上与数据库对话:是服务器完成了任务,如果没有数据库连接,它将无法工作。@Alvaro:它需要连接来确定用于转义内容的字符集。但没有往返。所有转义都在客户端完成。不相信我?打开wireshark,观看PHP和MySQL之间的通信。客户端进行转义(这也是唯一有意义的事情)…@ircmaxell-我刚刚测试过,你完全正确。我误解了文档中的
mysql\u real\u escape\u string()调用mysql的库函数mysql\u real\u escape\u string
部分。显然,它指的是客户机库。@ahoo:准备好的语句(或更准确的参数化查询)是更好的选择。只有正确设置并正确使用字符集,才能依赖客户端转义。和任何工具一样,它的好坏取决于它的使用方式……是的,我想得很好。但参数方式有一个问题:参数计数是固定的,但我想动态创建sql,参数计数取决于用户输入值。@啊,参数计数不是固定的,没有什么可以阻止您在循环中动态添加参数。。。当然,在这种情况下,您不会获得性能方面的好处,但它仍然比在SQL查询中硬编码值要好。谢谢@Thomas,所以它就像PHP中的“Prepared Statement”(使用函数:mysqli_stmt_prepare(),mysqli_stmt_bind_param())。是吗?@ahoo,是的,大致相同。顺便说一句,如果要使用不同的参数值多次重用.NET中的命令,也可以显式地
Prepare()
using(var command = new SqlCommand("insert into MyTable(X, Y) values(@x, @y)", connection))
{
    command.Parameters.Add("@x", textBoxX.Text);
    command.Parameters.Add("@y", textBoxY.Text);
    command.ExecuteNonQuery();
}