Я столкнулся с чем-то странным, что, по моему мнению, является явной ошибкой, поэтому я предполагаю, что я делаю что-то не так: у меня есть следующая таблица:
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 #:
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
}
}
Что вызывает исключение со следующим сообщением.
{"У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с" s do it ")" в строке 1 "}
Теперь, исправьте меня, если я ошибаюсь, но разве это не совсем та проблема, которую хранимые процедуры и параметры предназначены для решения для защиты от атак инъекций?
Или я здесь что-то не так делаю?