C# MySql存储过程参数转义
我遇到了一些奇怪的事情,我觉得这是一个明显的错误,所以我猜我做错了什么:我有下表:C# MySql存储过程参数转义,c#,mysql,stored-procedures,parameters,C#,Mysql,Stored Procedures,Parameters,我遇到了一些奇怪的事情,我觉得这是一个明显的错误,所以我猜我做错了什么:我有下表: CREATE TABLE BlurbTest ( ID SERIAL NOT NULL ,Blurb TEXT NOT NULL ); 使用以下存储过程: DELIMITER $$ CREATE PROCEDURE spInsertBlurbTest ( OUT ID INT ,IN BlurbParm TEXT ) BEGIN INSERT
CREATE TABLE BlurbTest
(
ID SERIAL NOT NULL
,Blurb TEXT NOT NULL
);
使用以下存储过程:
DELIMITER $$
CREATE PROCEDURE spInsertBlurbTest
(
OUT ID INT
,IN BlurbParm TEXT
)
BEGIN
INSERT INTO BlurbTest(
Blurb
) VALUES (
BlurbParm
);
SET ID = LAST_INSERT_ID();
END$$
DELIMITER ;
以及以下C#代码:
正在引发异常,并显示以下消息。
{“您的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以了解第1行附近使用“do it’”的正确语法”}
现在,如果我错了,请纠正我的错误,但这不是存储过程和参数要解决的问题类型,以帮助防止注入攻击吗
或者我在这里做错了什么?你是对的,但是驱动程序可能没有正确地转义这些字符。这是你的吗
这最终在中继代码中得到了修复。我期待它出现在6.2.1版本中。
using (var conn = new MySqlConnection(Settings.ConnectionString))
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "spInsertBlurbTest";
cmd.CommandType = CommandType.StoredProcedure;
MySqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters["@BlurbParm"].Value = "let's do it";
cmd.ExecuteNonQuery(); // Throws Exception
}
}