1

SQL Server CE テーブルからレコードを削除したいと考えています。

3 つのテーブル スクリプト、オプション、および結果があります。結果テーブルからレコードを削除したいと思います。where句には、他のクエリを介して取得された動的情報が含まれています。これらのクエリは正常に機能し、必要なデータを提供します。

私が得るエラーは次のとおりです。

クエリの解析中にエラーが発生しました。[ トークン ライン番号 = 1、トークン ライン オフセット = 25、トークン エラー = from ]

例外をスローするコードは次のとおりです。

Dim connLoc As SqlCeConnection = New SqlCeConnection(My.Settings.ConnectionString)
connLoc.Open()     
Dim strDel As String = "Delete ResultsTable from ResultsTable r inner join OptionsTable o ON o.TestName=r.TestName inner join ScriptTable c ON r.TestName=c.TestName WHERE r.TestName = '" & ds1Loc.Tables(0).Rows(0)(1) & "' AND [Index] = '" & lstIndex & "'"
Dim cmdDel As SqlCeCommand = New SqlCeCommand
cmdDel.CommandText = strDel
cmdDel.Connection = connLoc
cmdDel.ExecuteScalar()

ds1Loc.Tables(0).Rows(0)(1)とに保持されている値lstIndexは正しいので、問題にはなりません。

また、このクエリは SQL Server で動作します。SQL CE は、SQL Server 2008 と同じように削除機能をサポートしていないのでしょうか?

編集

例外の下で Kafs が推奨する解決策を使用することは、依然として同じです。

クエリの解析中にエラーが発生しました。[ トークン行番号 = 1、トークン行オフセット = 10、エラーのトークン = から]

実行前のcmdDelのcommandTextは

Delete r from ResultsTable r inner join OptionsTable o ON o.TestName=r.TestName inner join ScriptTable c ON r.TestName=c.TestName WHERE r.TestName = @TestName AND [Index] = @lstIndex

@TestName@lstIndexそれぞれ「My test」と「3」の値を持っています。

このクエリは SQL CE サーバーに送信されるため、'SQLParameter' を SQLCeParameter に変更したことは、今後これを読む人に言及する価値があるかもしれません。

4

1 に答える 1

0

Table alies与えた (r) をResultsTable正しく使用する必要があります。

//--Correct way
Dim strDel As String = "Delete r from ResultsTable r ..."

//--Following is wrong
Dim strDel As String = "Delete ResultsTable from ResultsTable r ..."

また、Parameterized query 文字列を渡すよりもa を使用し、最後ExecuteNonQuery()Close()接続を使用することをお勧めします

Dim strDel As String = "Delete r from ResultsTable r inner join OptionsTable o
                         ON o.TestName=r.TestName inner join ScriptTable c 
                         ON r.TestName=c.TestName WHERE r.TestName = @TestName 
                         AND [Index] = @LastIndex"

With cmdDel.Parameters
        .Add(New SqlParameter("@TestName", ds1Loc.Tables(0).Rows(0)(1)))
        .Add(New SqlParameter("@LastIndex", lstIndex))
End With
...
cmdDel.ExecuteNonQuery() 
于 2013-02-01T11:54:13.127 に答える