Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel单元格值到SQL,包括特殊字符_Sql_Vba_Excel - Fatal编程技术网

Excel单元格值到SQL,包括特殊字符

Excel单元格值到SQL,包括特殊字符,sql,vba,excel,Sql,Vba,Excel,我正在尝试将excel电子表格中的信息写入SQL表中。代码运行良好,但我偶然发现了特殊的字符问题。我的电子表格中有一列记录注释,这些注释随后被转移到SQL表中。我发现一条带有逗号的注释,代码失败 是否有办法更改SQL表以处理此问题或修改VBA代码 代码如下: stSQL = "INSERT INTO Notes " & _ "(ID, Category, Ref, Client, Notes, Date_Loaded, Latest) " &

我正在尝试将excel电子表格中的信息写入SQL表中。代码运行良好,但我偶然发现了特殊的字符问题。我的电子表格中有一列记录注释,这些注释随后被转移到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)"
“提前感谢”

一般来说,如果您使用SQL编写任何代码,都应该非常清楚

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

甚至VBA

一般来说,您需要编写以下内容():

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

如果你像这样搜索它,你可以找到更多关于它的例子:


一般来说,以这样的方式读取SQL是一个巨大的安全问题。这样写的唯一原因是如果您是唯一使用该应用程序的人。一般来说,任何几乎没有技能的人都可以删除您的数据库或读取其中的值。或者做其他痛苦的事情。

这个
特殊字符问题
SQL注入
而闻名。查询参数是您的朋友。使用它们。
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