Excel的单元格值包括特殊的charatcers

时间:2017-06-26 10:37:39

标签: sql vba excel-vba excel

我试图将excel电子表格中的信息写入SQL中的表格。代码工作正常,但我偶然发现了特殊字符问题。我在Notes的电子表格中有一列,然后将其传输到SQL表。我用逗号找到了评论,但代码失败了。

有没有办法更改SQL表来处理或修改VBA代码?

以下代码:

stSQL = "INSERT INTO Notes " & _
                    "(ID, Category, Ref, Client, Notes, Date_Loaded, Latest) " & _
                    " VALUES (" & _
                    "1, " & _
                    "4, " & _
                    "'" & Sheets("Clients").Range("N" & i).Offset(0, -12).Value & "', " & _
                    "'" & Sheets("Clients").Range("N" & i).Offset(0, -11).Value & "', " & _
                    "'" & Sheets("Clients").Range("N" & i).Value & "', " & _
                    "'" & Date & "', " & _
                    "1)"

提前致谢

1 个答案:

答案 0 :(得分:1)

一般来说, SQL Injection 是您应该清楚知道的,如果您使用SQL编写任何代码。

这是10年前所有语言中的一个重大安全问题。如今,几乎所有编程语言都会受到自动保护。

甚至是VBA。

一般来说,你需要写这样的东西(code DbFormus):

Dim cmd            As ADODB.Command
Dim prm1           As ADODB.Parameter
Dim prm2           As ADODB.Parameter
Dim prm3           As ADODB.Parameter
Dim strSql         As String

strSql = "UPDATE justtesting SET myTest = ?, myDate = ? WHERE id = ?"

Set cmd = New ADODB.Command
With cmd
    Set .ActiveConnection = CurrentProject.Connection

    .CommandText = strSql
    .CommandType = adCmdText

    Set prm1 = .CreateParameter("mytext", adVarWChar, adParamInput, 35)
    .Parameters.Append prm1
    prm1.Value = "as""d''##'fasdf"

    Set prm2 = .CreateParameter("mytimestamp", adDate, adParamInput)
    .Parameters.Append prm2
    prm2.Value = Now

    Set prm3 = .CreateParameter("mylong", adInteger, adParamInput)
    .Parameters.Append prm3
    prm3.Value = 42

    .Execute , , adExecuteNoRecords
End With
Set cmd = Nothing

看看代码中的问号。即使你对它们进行SQL注入,ADODB也知道该怎么做,绕过它并保护你的数据。

如果您像这样google,可以找到更多关于它的示例: https://www.google.com/search?q=avoid+sql+injection+vba&oq=avoid+sql+injection+vba&aqs=chrome..69i57.3193j0j4&sourceid=chrome&ie=UTF-8

通常,按照您的方式阅读SQL是巨大的安全问题。写这样的唯一理由是,如果您是使用该应用程序的唯一人。通常,任何几乎没有技能的人都可以删除数据库或读取数据库。或做其他痛苦的事情。