VB.NET Multiple使用SQL Server CE一次选择

时间:2013-08-13 12:39:11

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

我有一个数组列表,其中包含某些项目的ID。我想从SQL Server CE数据库中一次执行一个多选,并使用我的数组列表,其中包含要选择的项ID,类似于在oracle(ODP.NET)中进行多次更新时的相似内容,如下所述:{ {3}}

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

我想做同样的事情但是对于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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果您正在调用存储过程,则可以执行以下操作:

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

    我引用的链接可能不是Web上的最佳示例,但“序列化为XML,传递字符串参数,反序列化XML”的概念应该在这里工作