2017-09-22 9 views
0

R/ShinyでinputDateRange()を使用してSQLクエリ文を作成しています。プログラムでSQLクエリを構築するR/Shiny/RODBC

ここに私のコードです:

t.query <- paste0("Select [sensor_name], [temperature] from [dbo]. 
[temperature_sensor] where network_id = '24162' and date > " 
, sQuote(format(input$my.dateRange[1], format="%d-%m-%Y")) 
, " and date < " 
, sQuote(format(input$my.dateRange[2], format="%d-%m-%Y")) 
) 

今のステートメントは、単一引用符で閉じて、私は以下のエラーが表示されます。私の問題は、SQLの条件はWHEREの中に日付が含まれるように、様々な文字列を処理中です

42000 102 [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near '‘'. [RODBC] ERROR: Could not SQLExecDirect 'Select [sensor_name], [temperature] from [dbo].[temperature_sensor] where network_id = '24162' and date > ‘18-09-2017’ and date < ‘22-09-2017’'

が、私は「私はそれを始めた 『との文字列を閉じる必要があり、私は「連結する』(」)またはDQUOTE」 『』明示的に追加しようとしました....選択するが、私はまだ遭遇していますエラー。

アドバイスはありがとうございます。

答えて

0

私は、このアプローチは、あなたが理由やるべきでない(一致引用符のフラストレーションを削除など、多くの利点を持っているあなたは

library(RODBCext) 
channel <- odbcConnect(...) # make your connection object here 
Data <- 
    sqlExecute(channel = channel, 
      query = "Select [sensor_name], [temperature] 
         from [dbo].[temperature_sensor] 
         where network_id = ? and date between ? and ?", 
      data = list('24162', 
         format(input$my.dateRange[1], 
           format = "%Y-%m-%d"), 
         format(input$my.dateRange[2], 
           format = "%Y-%m-%d")), 
      fetch = TRUE, 
      stringsAsFactors = FALSE) 

としてクエリをパラメータ化することができますどの、RODBCextを使用してお勧めします次の理由の)、SQLインジェクションからデータを保護します。

+0

多くの方々には、ワウアドバイスとソリューションのスポットがあります。 – isibrahim