開発環境:
Visual Studio Express 2017
.NET Framework 4.6.1
DB browser for SQLite
解決したいこと
VB.netにて、windowsフォームアプリを開発中。
ボタンフォーム押下で実行する関数内で、
SQLCON.ExecuteQuery() コマンドで、sqliteのテーブルのデータをupsertしたい。
SQLiteのテーブル構造
delivery_date text(yyyy-mm-dd) PK product_type text PK stock_A integer stock_B integer stock_C integer stock_D integer stock_E integer
実際のコード(VB)
Dim DT As DataTable Dim StrSQLString As String = String.Empty StrSQLString = "INSERT INTO test_aggregate(delivery_date,product_type,stock_A,stock_B,stock_C,stock_D,stock_E)" + "VALUES('2020-08-03','aaa',0,0,0,0,0)" + "on CONFLICT(delivery_date,product_type) " + "DO UPDATE SET stock_A = 0, stock_B = 0, stock_C = 0, stock_D = 0, stock_E = 1" DT = SQLCON.ExecuteQuery(StrSQLString)
VisualStudioのデバッグモードで、上記コードを実行したときのダイアログ
SQL logic error near "on":syntax error
確認したこと
- ほかのSQL文をstrSQLStringに入れて実行し、問題なく動作した。(insert文、select文など)
- DB browser for SQLiteのコンソール(SQL実行タブ)で上記strSQLstring内のupsert文を実行し、問題なく処理された。
(実際には、DB browserで通ったSQL文を、VBのコードで文字列として再度記述しています。
視認性をよくするために改行を行っている以外は完全にコピペです。)
- デバッガで見た、strSQLStringの中身
StrSQLString = INSERT INTO test_aggregate(delivery_date,product_type,stock_A,stock_B,stock_C,stock_D,stock_E) VALUES('2020-08-03','aaa',0,0,0,0,0) on CONFLICT(delivery_date,product_type) DO UPDATE SET stock_A = 0, stock_B = 0, stock_C = 0, stock_D = 0, stock_E = 1 SQLite error (1): near "on": syntax error ※VALUES前とon前のスペースは、空いている・空いていない版の両方を試しましたが、結果は同じでした。
ご存じの方、ご指導のほど、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー