Ошибка преобразования данных. Зачем? - PullRequest
1 голос
/ 23 апреля 2011

Здравствуйте, у меня недавно возникла проблема в Asp. Net C # 4 приложение. Я получаю значения от адреса и затем помещаю их в базу данных. Но фреймворк выдаёт мне сообщение « Ошибка преобразования данных. [Значение состояния OLE DB (если известно) = 2] ». Вот мой код:

var db = Database.Open("StarterSite");
var insert = db.Execute("INSERT INTO Downloads (ID, Name, Url, Size) VALUES ('@1', '@2', '@3', '@4')", Convert.ToInt32(Request.QueryString["fileid"]), Request.QueryString["name"], Request.QueryString["url"], Request.QueryString["size"]);

Где ID равно int и Имя, URL, Размер равно ntext . Пожалуйста, помогите мне. Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 апреля 2011

Маркеры параметров, которые принимает помощник по базам данных, должны начинаться с 0

var db = Database.Open("StarterSite");
var insert = db.Execute("INSERT INTO Downloads (ID, Name, Url, Size) VALUES (@0, @1, @2, @3)", Request["fileid"], Request["name"], Request["url"], Request["size"]);
0 голосов
/ 23 апреля 2011

Если столбец ID является целым числом, не заключайте значение в кавычки:

'@1' должно быть @1

Примечание: У вас есть уязвимость SQL-инъекции. Никогда напрямую не использует ввод строки запроса (или ввод формы, или любой ввод пользователя) в запросе, подобном этому. Изучите параметризованные запросы, ORM и т. Д. То, что у вас есть, оставляет вашу базу данных открытой для атаки.

...