如何从SQL Server CE表中删除行?

时间:2013-02-01 11:47:42

标签: sql vb.net sql-server-ce

我想从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相同的Delete功能?

修改

使用Kafs建议的解决方案下面的例外仍然是相同的:

  

解析查询时出错。 [令牌行号= 1,令牌   line offset = 10,Token in error = from]

执行前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服务器。

1 个答案:

答案 0 :(得分:0)

您需要正确使用Table alies给出的ResultsTable(r);

//--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而不是传递字符串,然后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()