1

我想从 SQL Server CE 表中删除一条记录。

有 3 个表格脚本、选项和结果。我想从结果表中删除一条记录。where 子句包含通过其他查询检索到的动态信息。这些查询工作正常并提供所需的数据。

我得到的错误是:

解析查询时出错。[令牌行号=1,令牌行偏移量=25,错误令牌=来自]

抛出异常的代码如下:

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分别具有“我的测试”和“3”的值。

对于以后阅读本文的任何人来说,值得一提的是,我将“SQLParameter”更改为 SQLCeParameter,因为此查询将发送到 SQL CE 服务器。

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 ..."

此外,最好使用 aParameterized query 而不是传递字符串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 回答