Search code examples
vb.netoracle-databasesql-server-ceodp.net

VB.NET Multiple Selects at once using SQL Server CE


I have an array list which contains ids for some items. I would like to perform a multiple select at once from a SQL Server CE database and using my array list which contains what items id to be selected, something similar when doing for example multiple update in oracle (ODP.NET) as explained here: Oracle bulk updates using ODP.NET

where you can pass an array as a parameter.

I would like to do the same but for a multiple select instead in case of SQL Server CE. Is it possible?

DRAFT about what I would like to do:

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

Solution

  • You should try this approach by constructing your "IN" clause and adding each parameter in a for each loop:

    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