我想用我的代码执行以下操作,而且我不知道从哪里开始:
说我有一个包含Byte()
ID字段的类:
Public Class Message
Public Property ID as Byte()
'...
End Class
并且那些Message
存储在数据库中,ID存储为RAW列。
鉴于Messages = List(Of Message)
,我将如何删除列表中的所有邮件?
我已经达到了:
Dim sql as String = "DELETE FROM TableName WHERE IDColumn IN ("
For Each msg in Messages
sql = sql + msg.ID ' I don't think this will work
Next
sql = sql + ")"
Using oCommand As New OracleCommand(sql)
' ...
注意:IDColumn实际上不是主键列或其他任何内容 - 它只是另一栏(不幸的是,根据规范)。
答案 0 :(得分:1)
您缺少列表中的逗号,因此ID 1,2和3会生成IN (123)
。你可以改用这个循环:
For Each msg in Messages
sql = sql + msg.ID + ","
Next
sql= sql.Substring(0, sql.Length - 1) + ")";
或者即使如此,只要IDColumn不能为null:
Dim sql as String = "DELETE FROM TableName WHERE IDColumn IN (null"
For Each msg in Messages
sql = sql + ", " + msg.ID
Next
sql = sql + ")"
这也将处理消息为空的情况,而在第一个示例中,您应该检查这一点,以免最终导致IN ()
,这将导致语法错误。
答案 1 :(得分:0)
我的代码有两个问题:
String.Join(String.Empty, msg.ID.Select(Function(id) id.ToString("X2")))
所以我的循环看起来像:
For Each msg in Messages
sql = sql + "'" + String.Join(String.Empty, msg.ID.Select(Function(id) id.ToString("X2"))) + "'"
Next