1

我有一个数组列表,其中包含某些项目的 id。我想从 SQL Server CE 数据库中一次执行多项选择,并使用我的数组列表,其中包含要选择的项目 id,例如在 oracle (ODP.NET) 中执行多项更新时类似的操作,如下所述:Oracle使用 ODP.NET 进行批量更新

您可以在其中将数组作为参数传递。

我想做同样的事情,但在 SQL Server CE 的情况下使用多项选择。可能吗?

关于我想做的草稿:

SqlCeCommand = SqlCeConnection.CreateCommand()
SqlCeCommand.CommandText = "SELECT * FROM MyTable WHERE Id=:ids"
SqlCeCommand.CommandType = CommandType.Text

SqlCeCommand.Parameters.Add(":ids", DbType.Int32, ArrayListOfIds, ParameterDirection.Input)

Using reader As System.Data.SqlServerCe.SqlCeDataReader = SqlCeCommand.ExecuteReader()
  Using targetDb As Oracle.DataAccess.Client.OracleBulkCopy = New Oracle.DataAccess.Client.OracleBulkCopy(con.ConnectionString)
    targetDb.DestinationTableName = "MyTable"
    targetDb.BatchSize = 100
    targetDb.NotifyAfter = 100
    targetDb.BulkCopyOptions = Oracle.DataAccess.Client.OracleBulkCopyOptions.UseInternalTransaction
    AddHandler targetDb.OracleRowsCopied, AddressOf OnOracleRowsCopied targetDb.WriteToServer(reader)
    targetDb.Close()
  End Using
  reader.Close()
End Using
4

2 回答 2

1

您应该通过构建“IN”子句并在 for each 循环中添加每个参数来尝试这种方法:

SqlCeCommand = SqlCeConnection.CreateCommand()

SqlCeCommand.CommandType = CommandType.Text
Dim sb As New StringBuilder()
Dim i As Integer = 1

For Each id As Integer In ArrayListOfIds
    ' IN clause
    sb.Append("@Id" & i.ToString() & ",")

    ' parameter
    SqlCeCommand.Parameters.Add("@Id" & i.ToString(), DbType.Int32, id, ParameterDirection.Input)

    i += 1
Next
于 2013-08-13T14:36:47.477 回答
0

如果您正在调用存储过程,您可以这样做:

  1. 将数组序列化为 XML 字符串,如下所示:https ://stackoverflow.com/a/6937351/734914
  2. 调用存储过程,传入字符串参数
  3. 将 XML 字符串解析为包含 ID 的本地表变量,如下所示:https ://stackoverflow.com/a/8046830/734914
  4. 使用 ID 执行您需要的任何查询

我引用的链接可能不是网络上最好的示例,但“序列化为 XML、传递字符串参数、反序列化 XML”的概念在这里应该有效

于 2013-08-13T12:59:06.043 回答