WCF 서비스 모델을 사용하여 SQL에서 큰 데이터 형식의 테이블 및 뷰에서 작업 실행
SQL 어댑터를 사용하면 어댑터 클라이언트가 varchar(max), nvarchar(max) 또는 varbinary(max)와 같은 큰 데이터 형식의 열에서 데이터를 읽고 업데이트할 수 있습니다. 이러한 열에서 데이터를 읽으려면 어댑터 클라이언트에서 선택 작업을 사용할 수 있습니다. 이러한 열에 데이터를 삽입하거나 업데이트하기 위해 어댑터는 set<column_name> 작업을 노출합니다. 여기서< column_name > varchar(max), nvarchar(max) 또는 varbinary(max) 형식의 열 이름입니다.
또한 SQL Server varbinay(max) 열이 텍스트 문서 및 이미지와 같은 구조화되지 않은 데이터를 저장하게 할 수 있습니다. 이러한 구조화되지 않은 데이터를 FILESTREAM 데이터라고 합니다. FILESTREAM 데이터는 파일 시스템에 파일로 저장할 수 있습니다. SQL 어댑터를 사용하면 클라이언트가 varbinary(max) 형식의 열에 FILESTREAM 데이터를 입력할 수 있습니다. FILESTREAM 스토리지 에는 자세한 정보가 있습니다.
이 항목에서는 SQL Server 실행하는 컴퓨터와 FILESTREAM 데이터를 삽입하거나 업데이트할 수 있도록 어댑터 클라이언트를 실행하는 컴퓨터에서 수행해야 하는 특정 작업에 대한 정보를 제공합니다. 이 항목에서는 FILESTREAM 데이터를 삽입하기위해 column_name> 설정< 작업을 수행하는 방법에 대한 지침도 제공합니다.
참고
사용자 정의 형식의 열이 있는 테이블에서 작업을 수행하는 경우 SQL 어댑터를 사용하여 User-Defined 형식이 있는 테이블 및 뷰에 대한 작업을 참조해야 합니다.
필수 구성 요소
SQL Server 실행하는 컴퓨터와 어댑터 클라이언트를 실행하는 컴퓨터에서 다음 작업을 수행해야 합니다.
SQL Server 실행 중인 컴퓨터에서
SQL Server instance FILESTREAM을 사용하도록 설정해야 합니다. FILESTREAM 사용 및 구성을 참조하세요.
FILESTREAM 사용 데이터베이스를 만들어야 합니다. FILESTREAM-Enabled 데이터베이스 만들기를 참조하세요.
FILESTREAM 데이터를 저장하기 위한 테이블이 있어야 합니다. FILESTREAM 데이터 저장을 위한 테이블 만들기를 참조하세요.
어댑터 클라이언트를 실행하는 컴퓨터에서
- SQL 클라이언트 연결 SDK가 설치되어 있어야 합니다. SQL Server 설정을 실행하고 마법사의 기능 선택 페이지에서 SQL 클라이언트 연결 SDK를 선택하여 SQL 클라이언트 연결 SDK를 설치할 수 있습니다. 어댑터는 SQL 클라이언트 연결 SDK와 함께 설치된 sqlncli10.dll 사용하여 FILESTREAM 작업을 수행합니다.
이러한 작업을 완료한 후에는 모두 SQL Server 데이터베이스 테이블에 FILESTREAM 데이터를 삽입하거나 업데이트하도록 설정됩니다.
이 항목에서 대규모 데이터 형식에 대한 작업을 보여 주는 방법
데이터 형식이 큰 테이블에서column_name>설정< 작업을 수행하는 방법을 보여 주려면 Id 및Document 열이 있는 레코드 테이블을 만듭니다.
모든 데이터가 포함된 Records 테이블은 샘플과 함께 제공되는 SQL 스크립트를 실행하여 만들어집니다. 자세한 내용은 어댑터 샘플을 참조하세요.
ID 열은 uniqueidentifier 형식이며 GUID를 사용합니다. ID 열에 GUID ''
438B7B4C-5491-409F-BCC1-78817C399EC3
가 이미 있다고 가정합니다.문서 열의 형식은 VARBINARY(MAX)입니다. 문서 열을 업데이트하기 위해 어댑터는 SetDocument 작업을 노출합니다.
참고
SQL Server FILESTREAM 작업을 보여 주려면 문서 열이 FILESTREAM 데이터를 저장할 수 있다고 가정합니다.
이 항목에 사용된 예제 정보
이 항목의 예제에서는 Records 테이블에서 작업을 수행합니다. 레코드 테이블은 샘플과 함께 제공되는 SQL 스크립트를 실행하여 만듭니다. 샘플에 대한 자세한 내용은 어댑터 샘플을 참조하세요. 이 항목을 기반으로 하는 샘플 Records_FILESTREAM_Op SQL 어댑터 샘플도 제공됩니다.
WCF 클라이언트 클래스
SQL 어댑터가 검색하는 큰 데이터 형식에 대한 작업에 대해 생성된 WCF 클라이언트의 이름은 다음 표에 나열된 대로 테이블 또는 뷰의 이름을 기반으로 합니다.
데이터베이스 아티팩트 SQL Server | WCF 클라이언트 이름 |
---|---|
테이블 | TableOp_[스키마]_[TABLE_NAME]클라이언트 |
보기 | ViewOp_[스키마]_[VIEW_NAME]클라이언트 |
[SCHEMA] = SQL Server 아티팩트 컬렉션(예: dbo).
큰 데이터 형식의 열에서 작업을 호출하기 위한 메서드 서명
다음 표에서는 테이블의 기본 작업에 대한 메서드 서명을 보여 줍니다. 뷰 네임스페이스와 이름이 테이블의 네임스페이스를 대체한다는 점을 제외하고 보기의 서명은 동일합니다.
작업 | 메서드 시그니처 |
---|---|
column_name 설정<> | public void set<column_name>(string Filter, byte[] Data); |
<Column_name> = 큰 데이터 형식의 열 이름입니다.
예를 들어 다음 코드는 기본 "dbo" 스키마 아래 Records 테이블의 SetDocument 작업에 대해 생성된 WCF 클라이언트 클래스에 대한 메서드 서명을 보여 줍니다.
public partial class TableOp_dbo_RecordsClient : System.ServiceModel.ClientBase<TableOp_dbo_Records>, TableOp_dbo_Records {
public void SetDocument (string Filter, byte[] Data);
}
이 코드 조각에서 TableOp_dbo_RecordsClient 어댑터 서비스 참조 플러그 인 추가에서 생성된 SqlAdapterBindingClient.cs의 WCF 클래스 이름입니다.
큰 데이터 형식의 열에 대한 작업에 대한 매개 변수
이 섹션에서는column_name> 설정< 작업에 필요한 매개 변수를 제공합니다.
매개 변수 이름 | Description |
---|---|
문자열 필터 | 어댑터가 큰 데이터 형식의 열에 대한 레코드를 업데이트하는 WHERE 절을 지정합니다. |
byte[] Data | 큰 데이터 형식의 열에 대해 업데이트해야 하는 값을 지정합니다. |
column_name> 설정< 작업은 값을 반환하지 않습니다.
큰 데이터 형식의 열에서 작업을 호출하는 WCF 클라이언트 만들기
WCF 클라이언트를 사용하여 SQL Server 작업을 수행하는 데 필요한 제네릭 작업 집합에는 SQL 어댑터를 사용한 WCF 서비스 모델 개요에 설명된 작업 집합이 포함됩니다. 이 섹션에서는 레코드 테이블에서 SetDocument 작업을 호출하는 WCF 클라이언트를 만드는 방법을 설명합니다. 어댑터는 큰 데이터 형식의 열에서 데이터를 업데이트하는 SetDocument 작업을 노출합니다.
WCF 클라이언트를 만들려면
Visual Studio에서 Visual C# 프로젝트를 만듭니다. 이 항목의 경우 콘솔 애플리케이션을 만듭니다.
Records 테이블에서 SetDocument 작업에 대한 WCF 클라이언트 클래스를 생성합니다. WCF 클라이언트 클래스를 생성하는 방법에 대한 자세한 내용은 SQL Server 아티팩트용 WCF 클라이언트 또는 WCF 서비스 계약 생성을 참조하세요.
솔루션 탐색기 ,
Microsoft.ServiceModel.Channels
및System.Transactions
에 대한 참조를Microsoft.Adapters.Sql
추가합니다.Program.cs 파일을 열고 네임스페이스를
System.Transactions
추가합니다.Program.cs에서 아래 코드 조각에 설명된 대로 클라이언트를 만듭니다.
TableOp_dbo_RecordsClient client = new TableOp_dbo_RecordsClient("SqlAdapterBinding_TableOp_dbo_Records"); client.ClientCredentials.UserName.UserName = ""; client.ClientCredentials.UserName.Password = "";
이 코드 조각
TableOp_dbo_RecordsClient
에서 은 SqlAdapterBindingClient.cs에 정의된 WCF 클라이언트입니다. 이 파일은 어댑터 서비스 참조 추가 플러그 인에 의해 생성됩니다.SqlAdapterBinding_TableOp_dbo_Records
는 클라이언트 엔드포인트 구성의 이름이며 app.config 정의됩니다. 이 파일은 어댑터 서비스 참조 추가 플러그 인에서도 생성되며 바인딩 속성 및 기타 구성 설정을 포함합니다.주의
FILESTREAM 데이터에 대한 작업을 수행하려면 항상 Windows 인증 사용하여 SQL Server 연결해야 합니다. Windows 인증 사용하여 연결하려면 앞의 코드 조각과 같이 빈 사용자 이름과 암호를 제공해야 합니다. 또한 Windows 인증 사용하여 SQL Server 연결하기 전에 SQL 어댑터에서 Windows 인증을 사용하여 SQL Server 연결에 언급된 단계를 수행해야 합니다.
참고
이 코드 조각에서는 구성 파일의 바인딩 및 엔드포인트 주소를 사용합니다. 코드에서 이러한 값을 명시적으로 지정할 수도 있습니다. 클라이언트 바인딩을 지정하는 다양한 방법에 대한 자세한 내용은 SQL 어댑터에 대한 클라이언트 바인딩 구성을 참조하세요.
아래 코드 조각에 설명된 대로 클라이언트를 엽니다.
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
Records 테이블에서 SetDocument 작업을 호출합니다.
주의
column_name> 설정< 작업은 항상 트랜잭션에서 수행되어야 합니다. 이렇게 하려면트랜잭션 scope 내에서 column_name> 설정< 작업을 호출해야 하며 app.config UseAmbientTransaction 바인딩 속성을 true로 설정해야 합니다.
using (TransactionScope tx = new TransactionScope()) { string filter = "WHERE Id='438B7B4C-5491-409F-BCC1-78817C399EC3'"; byte[] data = ASCIIEncoding.ASCII.GetBytes("Sample data"); client.SetDocument(filter, data); tx.Complete(); }
여기서 애플리케이션은 문자열 "샘플 데이터"를 base64로 인코딩된 문자열로 변환하고 필터 조건을 충족하는 레코드에서 업데이트합니다.
아래 코드 조각에 설명된 대로 클라이언트를 닫습니다.
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
프로젝트를 빌드한 다음 실행합니다. 애플리케이션은 Records 테이블의 문서 열을 업데이트합니다.