DBI :: dbSendQuery не работает с RJDBC :: JDBC для SQL SERVER - PullRequest
0 голосов
/ 31 октября 2018

Когда я запускаю оператор вставки с драйвером odbc , все в порядке.

drv <- odbc::odbc()
conn <- createConn(drv, trusted_connection = T, dsn="mydsn", uid="myuid", pwd="mypwd")
DBI::dbSendQuery("INSERT INTO \"dbo\".\"testjdbc\" (d) values('4')")

Когда я запускаю оператор выбора с jdbc , все тоже хорошо:

   drv <- RJDBC::JDBC(driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver", classPath = "C:\\mssql-jdbc-7.0.0.jre8.jar") 
    conn <- DBI::dbConnect(drv, trusted_connection = T, url = "jdbc:sqlserver://myserver\\\\myinstance:1111;databaseName=mydatabasename", user="myuid", password="mypwd") 
    DBI::dbGetQuery(conn, "Select * from dbo.mytable")

и соединение для jdbc действительно:

drv <- RJDBC::JDBC(driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver", classPath = "C:\\mssql-jdbc-7.0.0.jre8.jar") 
        conn <- DBI::dbConnect(drv, trusted_connection = T, url = "jdbc:sqlserver://myserver\\\\myinstance:1111;databaseName=mydatabasename", user="myuid", password="mypwd") 
    DBI::dbIsValid(conn) # TRUE

Но когда я пытаюсь вставить оператор (такой же, как первый) с драйвером jdbc , например:

drv <- RJDBC::JDBC(driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver", classPath = "C:\\mssql-jdbc-7.0.0.jre8.jar") 
conn <- DBI::dbConnect(drv, trusted_connection = T, url = "jdbc:sqlserver://myserver\\\\myinstance:1111;databaseName=mydatabasename", user="myuid", password="mypwd") 
DBI::dbSendQuery(conn, "INSERT INTO \"dbo\".\"testjdbc\" (d) values('4')")

тогда я получаю ошибку:

Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
  Unable to retrieve JDBC result set for INSERT INTO "dbo"."testjdbc" (d) values('4') (The statement did not return a result set.)

Так что jdbc выбор в порядке, но вставка, обновление, удаление дает ошибки, в то время как с odbc я могу сделать все.

1 Ответ

0 голосов
/ 31 октября 2018

Решение состоит в том, чтобы запускать вставки не с DBI::dbSendQuery, а с RJDBC::dbSendUpdate.

Спасибо @Mark Rotteveel за ваш ответ. Благодаря вам я нашел решение.

...