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

Posted

技术标签:

【中文标题】如何从 SQL Server CE 表中删除一行?【英文标题】:How to delete a row from a SQL Server CE Table? 【发布时间】:2013-02-01 11:47:42 【问题描述】:

我想从 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 服务器。

【问题讨论】:

【参考方案1】:

您需要正确使用您为ResultsTable 提供的Table alies (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() 

【讨论】:

感谢您的回复。我仍然遇到异常,这次略有不同:'解析查询时出错。 [令牌行号=1,令牌行偏移量=10,错误令牌=来自]。' 我已经用更多细节更新了答案。你能在执行前显示你在strDel字符串中的内容吗? 再次感谢,不幸的是例外情况仍然存在。在尝试了您编辑的灵魂之后,我已经用详细信息更新了我的原始问题,因为在那里更容易阅读,而且我不能在评论框中有多个“@”符号。 您是否尝试使用cmdDel.ExecuteNonQuery() 而不是cmdDel.ExecuteScalar() 是的,我尝试了大部分的执行语句。我真的很难过。 SQL CE 和 SQL Server 一样支持删除,我猜?

以上是关于如何从 SQL Server CE 表中删除一行?的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server 表中删除一行

如何从 SQL Server 中的表中删除重复行 [重复]

SQL Server:如何删除行号

无法从 SQL Server CE 中删除记录

SQL CE中如何删除表中的所有数据?

如何在 SQL Server 中使用 INNER JOIN 从多个表中删除