我正在尝试使用DBI
软件包dbSendQuery
,dbBind
和dbFetch
工作流程进行一些参数化查询。
我可以使用dbSendQuery
将?
用作变量的占位符。但是,当我运行dbBind
时,出现以下错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function 'dbBind' for signature '"Microsoft SQL Server"'
我的整个代码如下:
library(odbc)
library(DBI)
test_connection <- DBI::dbConnect(odbc::odbc(),
Driver = "SQL Server",
Server = "MyServer",
Database = "MyDataBase")
test_query <- dbSendQuery(test_connection,
"SELECT TOP 2 col1, col2 FROM MyTable WHERE col2 = ?")
dbBind(test_connection,
list('value'))
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function 'dbBind' for signature '"Microsoft SQL Server"'
有人可以向我解释此错误的原因吗?
如果我在value
语句中对dbSendQuery
进行了硬编码并使用了dbFetch
,那么查询确实可以正常工作。
答案 0 :(得分:1)
在dbBind
中,您应该使用查询对象而不是连接对象。在您的示例中:
dbBind(test_query, list('value'))