Member 14570812 Ответов: 2

Как вставить данные в SQL server с помощью visual basic 6.0


попытка вставить данные в sql server через visual basic 6.0. ошибок нет, но данные не отражаются в базе данных. пожалуйста помочь

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

мой код:
Dim aconnection As New ADODB.Connection
Dim aRecSet As New ADODB.Recordset

Private Sub Command1_Click()
Dim sql As String
sql = "insert into krish(pid,name,class) values ("
sql = sql & "'" & Text1.Text & "',"
sql = sql & "'" & Text2.Text & "',"
sql = sql & "'" & Text3.Text & "')"
MsgBox "inserted"
End Sub

Private Sub Form_Load()
aconnection.Open _
"provider=sqloledb;" & _
"Data source=BMSCW_CSNL_22;" & _
"intial catalog=krishna;" & _
"trusted_connection=yes;"
End Sub
Private Sub form_unload(cancel As Integer)
aconnection.Close
End Sub

Maciej Los

Вы уверены, что SQL Server позволяет удаленные подключения? Видеть: Настройка параметра конфигурации сервера удаленного доступа - SQL Server | Microsoft Docs[^]

MadMyche

Можете ли вы сказать, что SQL-инъекция ?

2 Ответов

Рейтинг:
1

Maciej Los

Прежде всего, sql-сервер должен иметь возможность принимать удаленные подключения. Видеть:
Настройка параметра конфигурации сервера удаленного доступа - SQL Server | Microsoft Docs[^]
Настройка Брандмауэра Windows для разрешения доступа к SQL Server - SQL Server | Microsoft Docs[^]

Во-вторых, вы должны использовать ADODB.Команда для вставки данных. Для получения более подробной информации, пожалуйста, смотрите: Выполнение, обновление и четких методов пример (ВБ) - SQL-сервер | Майкрософт документы[^]

Кстати: я бы изменил строку соединений на эту:

sCon = "Provider=SQLNCLI11;Server=yourServerName\theInstanceOfSqlServerName;Database=yourDataBaseName;Trusted_Connection=yes;"

И я бы использовал With ... End With заявление:
'create connection
Set oCon = New ADODB.Connection
With oCon
    .ConnectionString = sCon
    .Open
End With
'create command
sql = "insert into krish(pid,name,class) values ("
sql = sql & "'" & Text1.Text & "',"
sql = sql & "'" & Text2.Text & "',"
sql = sql & "'" & Text3.Text & "')"

Set oCom = New ADODB.Command
With oCom
    Set .ActiveConnection = oCon
    .CommandText = sql 
    .Execute
End With


Кроме того, я бы предложил использовать обработчики ошибок. Видеть: On Error Statement (Visual Basic) | Microsoft Docs[^]


Member 14570812

Дим окон как новый объект adodb.Подключение
Dim ocom как ADODB.Команда
Dim sql как строка
Частные command1_click югу()
sql = "вставить в значения krish(pid,name,class) ("
в SQL = SQL и усилителя; "'" &амп; Текст1.Текст & "',"
в SQL = SQL и усилителя; "'" &амп; Текст2.Текст &ампер; "',"
в SQL = SQL и усилителя; "'" &амп; Текст3.Текст & "')"
Установите ocom = новый ADODB.Команда
С помощью ocom
Набор.ActiveConnection = ocon
.Свойства commandtext = SQL в
.Выполнять
Конец С
Конец Подводной Лодки

Частная Суб События Form1_load()
Комплект окон = новый объект adodb.Подключение
sCon = "Provider=SQLOLEDB.1;Server=BMSCW_CSNL_22;Database=krishna;Trusted_Connection=yes;"
С окон
.ConnectionString = sCon
.Открывать
Конец С
Конец Подводной Лодки
Private Sub form1_unload(отмена как целое число)
окон.Закрывать
Конец Подводной Лодки

Maciej Los

Я бы не рекомендовал открывать соединение во время загрузки формы и закрывать соединение во время закрытия формы. Вы должны переместить весь код в процедуру button_click, потому что, когда вы хотите нажать кнопку во второй раз, вы увидите сообщение об ошибке, что соединение уже открыто.

Member 14570812

правильно ли, что есть ошибка в строке(Set .ActiveConnection = ocon")

CHill60

В чем же ошибка?

Maciej Los

Да, это так.
Перейдите по ссылке, которую я предоставил.

Рейтинг:
0

Patrice T

Цитата:
ошибок нет, но данные не отражаются в базе данных.

Вы создаете команду insert, но не выполняете ее. это ваша первая проблема.

sql = "insert into krish(pid,name,class) values ("
sql = sql & "'" & Text1.Text & "',"
sql = sql & "'" & Text2.Text & "',"
sql = sql & "'" & Text3.Text & "')"

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]