2008-10-31 6 views
0

나는 C#을 사용 중이며 데이터를 수신하는 열린 tcpip 연결을 가지고 있습니다. 모든 데이터를 수신하는 대신 스트림을 ms SQL 서버 데이터베이스에 저장할 수 있습니까? 스트림이 수신되는 동안 스트림을 데이터베이스로 보낼 수 있다면 전체 데이터 덩어리를 메모리에 보관할 필요가 없습니다. 가능한가요?데이터베이스에 직접 스트리밍

답변

4

DB에 BLOB로 쓰거나 데이터를 변환 한 다음 각 행에 삽입을 실행 하시겠습니까?

의견에 대한 귀하의 대답이 혼란 스럽습니다. BLOB 열에 스트림을 쓰는 것은 데이터를 가져 와서 별도의 행에 대한 삽입으로 변환하는 것과 매우 다릅니다. 스트림의 바이트 덩어리에 대한

update myTable set myColumn.Write(@data, @offset, @length) where someid = @someId 

:

에 관계없이하는 BLOB 컬럼에 스트리밍 먼저, 반복해서 호출 UPDATE 문에 삽입해야 블롭 열이 행을 생성함으로써 가능하다 .

Perfect example located here.

+0

대부분의 경우 데이터를받은 그대로 데이터베이스에 기록합니다. 일부 경우 원시 데이터를 읽고, XML 스트림을 만들고 저장합니다. 첫 번째 시나리오에 대한 답을 얻었다면 두 번째 시나리오에서 나 자신을 파생시킬 수 있다고 확신합니다. 감사. – Jeremy

+0

위대한 예를 들자면 비슷한 상황에서 도움이되었습니다. – cweston

1

가 스트림 데이터베이스 작업의 exmaples에 대한 herehere를 참조하십시오. 본질적으로 반복 버퍼 (이상적으로는 SQL Server에서 8040 바이트의 배수)를 전달해야합니다. 이 예제는 SQL 2000을 기반으로합니다. SQL 2005에서는 varbinary (max)가 더 쉬울 것입니다. 매우 비슷합니다.

1

패킷을 받으면 버퍼를 파일에 쓰고 전송이 완료되면 데이터베이스에 삽입하는 것이 좋을까요?

데이터베이스에 직접 스트리밍하면 오랜 시간 동안 데이터베이스 연결이 유지됩니다. 특히 클라이언트의 네트워크 연결이 가장 좋지 않은 경우 특히 그렇습니다.

관련 문제