簡體   English   中英

ADODB Recordset.Open給SQL提供語法錯誤excel

[英]ADODB Recordset.Open giving syntax error excel to SQL

我敬酒,無法弄清楚為什么我在rst.Line上遇到SYNTAX錯誤。

我已經嘗試過rst.Open strSQL,cnt,adOpenStatic,adLockReadOnly,adCmdText

但這仍然給我一個錯誤。

我暗中懷疑它與strSQL如何獲取單元格值並將其附加到字符串的末尾有關。

非常感謝您的幫助。

   Public Sub EzPz()

Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset


Set cnt = New ADODB.Connection
Set rst = New ADODB.Recordset


Dim strSQL As String

'Open connection
cnt.ConnectionString = "Driver={SQL Server};Server=HIDDEN;Database=HIDDENXX;Trusted_Connection=yes;UID=HIDDENU;PWD=HIDDENP;"
cnt.Open

'String for SQL cmd
Dim p1 As Range
Set p1 = ActiveSheet.Cells(1, 4)
strSQL = "SELECT DBNAME.vItem.Upc FROM DBNAME.vItem WHERE vItem.ItemDesc=" & p1.Value



rst.ActiveConnection = cnt    
rst.Open strSQL

ActiveSheet.Cells(1, 1).CopyFromRecordset rst

End Sub

您的代碼需要進行SQL注入。 您可以按此答案所示將字符串文字括在單引號中,以解決語法錯誤,但是並不能解決嚴重的安全性問題。

強制性XKCD

那么,如何安全地設置查詢參數? 使用參數化查詢

Dim conn As ADODB.Connection
Set conn = New ADOBD.Connection
.ConnectionString = "connection string ideally using Windows Authentication"
.Open

理想情況下,您的連接字符串不包含任何用戶名或密碼。 服務器需要進行配置,以支持Windows身份驗證這個工作-則查詢與登錄的Windows用戶的憑據執行,與該用戶的權限。

Dim cmd As ADODB.Command
Set cmd.ActiveConnection = conn
cmd.CommandType = adCmdText
cmd.CommandText = "SELECT DBNAME.vItem.Upc FROM DBNAME.vItem WHERE vItem.ItemDesc = ?;"

設置一個Command對象。 CommandText將是您的SQL語句,但不是將參數連接到其中,而是使用? 每個問號。

Dim itemDesc As ADODB.Parameter
Set itemDesc = New ADODB.Parameter
itemDesc.Type = adVarChar
itemDesc.Direction = adParamInput
itemDesc.Value = p1.Value

cmd.Parameters.Append(itemDesc)

為每個創建一個Parameter ? SQL語句中的問號。 您必須為每個參數提供一個參數? 問號。

Dim results As ADODB.Recordset
Set results = cmd.Execute

您可以通過調用命令的Execute方法來獲取Recordset 服務器處理參數。

ActiveSheet.Cells(1, 1).CopyFromRecordset results

如果一切順利, Recordset包含您的結果。

始終使用參數化查詢:連接到SQL語句中的用戶輸入是一個困擾。

SQL需要這樣理解字符串文字。 您需要使用單引號分隔字符串文字,以使語法有效。

您可以試試看是否可行嗎?

strSQL = "SELECT DBNAME.vItem.Upc FROM DBNAME.vItem WHERE vItem.ItemDesc= '" & p1.Value & "'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM