2013-08-13 3 views
1

일부 항목에 대한 ID가 포함 된 배열 목록이 있습니다. SQL Server CE 데이터베이스에서 한 번에 다중 선택을 수행하고 항목 ID를 포함하는 배열 목록을 사용하여 여기에서 설명한대로 Oracle (ODP.NET)에서 여러 업데이트를 수행 할 때 비슷한 항목을 선택하십시오. Oracle bulk updates using ODP.NETVB.NET 여러 번 SQL Server CE를 사용하여 선택

매개 변수로 배열을 전달할 수 있습니다.

SQL Server CE의 경우 다중 선택과 동일한 작업을하고 싶습니다. 가능한가?

내가하고 싶은 일에 대해

DRAFT : 당신이 저장 프로 시저를 호출하는 경우

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 
+0

우리는 SQL의 버전을 볼 수 사용중인 ? 이는 우리가하려는 일에 대해 더 잘 이해할 수있게 도와줍니다. 지금까지 내가 아는 한 SQL Server CE에는 다중 선택과 같은 작업이 없습니다. –

+0

글쎄, 난 아직 아무 것도하지 않았다. 나는 배열의 목록을 가지고 있고 그 일에서부터 SqlCe 데이터베이스의 테이블에서 배열 목록의 ID를 선택하는 것이지만, 한 번에 하나씩하지 않고 한 번에이 작업을 수행하면됩니다. 이 선택, 나는 오라클의 테이블에 그 레코드의 대량 복사를 수행하기 위해 datareader를 사용하여 이것을 읽고 싶습니다. 분명히 SqlCe에 대한 select 결과는 oracle의 테이블과 동일한 열과 유형을가집니다. – user1624552

답변

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 
+0

어떤 이유에서이 마지막 줄을 대답에 게시 할 수 없으므로 여기에 'SqlCeCommand.CommandText = "SELECT * FROM MyTable WHERE Id IN ("+ sb.ToString() + ")" –

+1

@ 기호는 다음과 같습니다 : Oracle에서는 맞습니까? 매개 변수입니다. 한 가지, In 절의 마지막 문자는 문자열로 변환 할 때 제거해야합니다. i.ToString(). TrimEnd (",") – user1624552

0

, 당신은이 작업을 수행 할 수 있습니다

  1. 처럼, XML의 문자열로 배열을 직렬화 this : https://stackoverflow.com/a/6937351/734914
  2. 문자열 매개 변수
  3. 을 전달하여 저장 프로 시저를 호출합니다. XML 문자열을 ID가 포함 된 로컬 테이블 변수로 구문 분석합니다. 예를 들어, S : https://stackoverflow.com/a/8046830/734914
  4. 내가 웹에 가장 좋은 예되지 않을 수 있습니다 참조하는 ID의

링크를 사용하여 당신이 필요로하는 어떤 쿼리를 실행하지만 "의 개념은, 직렬화를 XML로 직렬화 문자열 매개 변수를 전달 XML "여기서 일해야

당신은 구성하여이 방법을 시도해야
+1

작성자가 전체 SQL Server를 사용하고 있지 않아 작동하지 않습니다. SQL Server CE는 전체 SQL Server의 일부로 매우 제한적입니다. –

관련 문제