navid fayaz Ответов: 2

Проблема с импортом неанглийских символов в SQL с помощью VBA excel


Я могу импортировать свои неанглийские символы из excel (лист 3 с именем "товар") В SQL с помощью кода VBA, но после этого мои символы изменились на вопросительный знак (?), и я фактически потерял их.

как я могу исправить свой код VBA?

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

Private Sub CommandButton1_Click()
   Dim con As ADODB.Connection
   Dim iRowNo As Integer
   Dim sGoodsName, sGoodsCode, sunit As String

   Set con = New ADODB.Connection
   con.Open "driver={SQL Server};" & "Server=DESKTOP-P163904;authenticateuser=True;database=sample1"

   iRowNo = 2
   Do Until Worksheets("Goods").Cells(iRowNo, 1) = ""
      sGoodsName = Worksheets("Goods").Cells(iRowNo, 1)
      sGoodsCode = Worksheets("Goods").Cells(iRowNo, 2)
      sunit = Worksheets("Goods").Cells(iRowNo, 3)

      con.Execute "insert into test3 (GoodsName, GoodsCode, unit) values ('" & sGoodsName & "', '" & sGoodsCode & "', '" & sunit & "')"
      iRowNo = iRowNo + 1
   Loop

   con.Close
   Set conn = Nothing

End Sub

2 Ответов

Рейтинг:
9

Patrice T

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


Рейтинг:
16

Wendelius

Прежде всего, убедитесь, что целевой столбец определяется как NVARCHAR (nchar и nvarchar (Transact-SQL) | Microsoft Docs[^]).

После этого используйте префикс N перед буквальными значениями. Иначе говоря:

con.Execute "insert into test3 (GoodsName, GoodsCode, unit) values (N'" & sGoodsName & "', N'" & sGoodsCode & "', N'" & sunit & "')"


Кроме того, чтобы защитить базу данных от SQL-инъекций и убедиться, что Апостроф правильно вставлен, если он присутствует в данных, вы должны использовать параметры. Взгляните на Параметры Командного Объекта | Microsoft Docs[^]