Member 13699390 Ответов: 2

Я использую vb.net-да. Я хочу использовать VB.NET чтобы добавить в Microsoft access но он всегда говорит не удалось


Импортирует System.Data.Для oledb
Открытый класс Рег
Дим данных, новых данных oledb.Метод oledbconnection
Тусклый да как обычный.DbDataAdapter
Dim ds As DataSet = новый набор данных

Частная суб методе button2_click(отправителя как объект, а равно EventArgs) обрабатывает элемент button2.Нажмите
txtmain.Покажите()
Меня.Рядом()
Конец Подводной Лодки

Частная суб обработчика button1_click(отправителя как объект, а равно EventArgs) обрабатывает кнопки button1.Щелчок

данные = Новый oledb для.Метод Oledbconnection("Поставщик=Майкрософт.Джет.Oledb для.4.0;Источник данных=С:\Пользователи\evely документы\\Отчет.МБР")
Попробуй
Dim запрос как целое число
Вызов данных.Открыть()
запрос = "вставить в данные (студенческий билет,имя,фамилию, адрес, адрес электронной почты) значения('" & Txtid.Текст & " ', '" & Txtfname.Текст & " ', '" & Txtlname.Текст & "', '" & Txtadd.Текст & " ', "" & Txte.Текст & " ' )"
Дим программы sqlcmd как oledb.Объект Oledbcommand = Новый Oledb Для.Объект oledbcommand(запрос данных)
sqlcmd.Метод executenonquery()
MsgBox("Сохранение Записи")
Поймать ex как исключение
MsgBox("Сбой")
Конец Попытки
Конец Подводной Лодки



End Класса

Что я уже пробовал:

я ищу но он показывает только о SQL

phil.o

Хорошо, вы приняли мой ответ, Спасибо за это.
Но это не должно мешать вам внимательно взглянуть на решение 2; OriginalGriff делает там существенный момент, который вы определенно не должны игнорировать.

2 Ответов

Рейтинг:
14

phil.o

query переменная объявляется как целое число, но подается со строковым значением.
Кроме того, текст сообщения об ошибке должен быть довольно описательным; пожалуйста, включите текст сообщения об ошибке в свой вопрос.


Maciej Los

5ed!

Рейтинг:
0

OriginalGriff

Для начала, не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Во - вторых, вам нужно использовать отладчик he и посмотреть, что именно показывает вам исключение-оно будет включать в себя детали, которые объяснят проблему.

Но быстрый взгляд на ваш SQL-оператор говорит: исправление уязвимости SQL-инъекции также избавит вас от этой проблемы!