Share via


Visual Studio의 데이터 액세스 문제 해결

업데이트: 2007년 11월

이 항목에는 Visual Studio에서 데이터 액세스 작업을 할 때 발생하는 몇 가지 일반적인 문제가 나열되어 있습니다.

디자인 타임에 액세스할 수 있는 데이터베이스를 런타임에 액세스할 수 없습니다.

이 상황은 런타임에 전달된 사용자 이름과 암호에 대해 데이터베이스 액세스가 거부될 때 발생합니다. 해결 방법은 연결 문자열과 데이터베이스에서 사용되는 인증 및 권한 부여 방법에 따라 다릅니다.

이 문제는 다음과 같은 경우에 발생합니다.

  • 연결 추가/수정 대화 상자(일반)를 완료할 때 특정 사용자 이름 및 암호 사용 옵션을 선택하고 암호 저장 허용 옵션을 선택하지 않은 경우. 이 경우 디자인 타임에 데이터 소스에 연결하려고 하면 사용자 이름과 암호를 입력하라는 메시지가 표시됩니다. 런타임에 연결하려면 올바른 사용자 이름과 암호를 데이터 소스에 전달하는 기능을 응용 프로그램에 포함해야 합니다.

확인해야 할 사항은 다음과 같습니다.

  • 응용 프로그램에서 사용되는 사용자 이름과 암호가 데이터 소스에 대해 올바른 액세스 권한을 갖고 있는지 확인합니다.

  • 데이터베이스에서 사용자의 권한이 올바르게 설정되었는지 확인합니다.

  • 응용 프로그램이 실행되는 컴퓨터와 데이터 소스가 있는 컴퓨터 사이에 네트워크 연결이 되어 있는지 확인합니다.

SQL 명령을 실행할 때 잘못된 출력 매개 변수가 반환되거나 출력 매개 변수가 반환되지 않습니다.

이 상황은 매개 변수의 Direction 속성이 잘못 설정되었을 때 발생합니다. 매개 변수의 Direction 속성은 ParameterDirection 열거형에 정의된 값으로 설정됩니다.

  • 매개 변수의 Direction 속성이 데이터를 받을 수 있는 값(출력 매개 변수에 대한 출력)으로 설정되어 있는지 확인합니다.

  • 매개 변수의 데이터 형식이 예상 반환 값과 동일한 데이터 형식인지 확인합니다.

    참고:

    출력 매개 변수는 데이터 스트림의 끝 부분에서 반환됩니다. 따라서 DataReader 개체(예: SqlDataReader)를 사용하는 경우 이 개체를 닫거나 출력 매개 변수가 나타날 때까지 데이터를 끝까지 읽어야 합니다.

반환되지 않는 출력 매개 변수에 대한 자세한 내용과 코드 예제를 보려면 Microsoft 기술 지원 서비스 웹 사이트 (https://support.microsoft.com)에서 Q308051을 검색하십시오.

'.NET Data SQL 공급자(System.Data.SqlClient)를 사용하려면 MDAC(Microsoft Data Access Components) 버전 2.6 이상이 필요합니다.'라는 오류가 발생합니다.

Microsoft Windows SDK(소프트웨어 개발 키트) 및 .NET Framework 재배포 가능 패키지에는 MDAC 설치 기능이 포함되어 있지 않습니다. 데이터 액세스 기능을 사용하는 모든 .NET Framework 응용 프로그램에는 MDAC 2.6 이상(MDAC 2.8 SP1 권장)이 필요합니다. 최신 버전의 MDAC는 Microsoft 웹 사이트 (https://www.microsoft.com)에서 다운로드할 수 있습니다.

Visual Studio에는 MDAC가 기본적으로 설치되므로 이 오류는 Visual Studio가 설치되지 않은 컴퓨터에 응용 프로그램을 배포할 때 주로 발생합니다.

응용 프로그램을 배포할 때, 설치 과정에서 대상 컴퓨터의 MDAC 버전을 확인하도록 설정할 수 있습니다. 자세한 내용은 방법: Microsoft Data Access Components의 시작 조건 추가를 참조하십시오.

트랜잭션을 커밋하거나 롤백할 때 예기치 않은 예외가 발생합니다.

데이터 소스에서 오류가 발생하여 트랜잭션이 즉시 롤백되는 경우, 응용 프로그램에서는 다음 오류 중 하나가 발생합니다.

  • "COMMIT TRANSACTION 요청에 대응되는 BEGIN TRANSACTION이 없습니다."

  • "ROLLBACK TRANSACTION 요청에 대응되는 BEGIN TRANSACTION이 없습니다."

이 오류는 의도적인 것이긴 하지만, 외부 데이터 소스에 액세스하는 Commit 및 Rollback 등의 메서드는 Try...Catch 문 안에서 호출하는 것이 가장 좋습니다. 자세한 내용은 방법: Try/Catch 블록을 사용하여 예외 catch(Visual Basic의 경우) 또는 try-catch(C# 참조)를 참조하십시오.

데이터 집합에서 테이블을 제거할 때 InvalidOperationException이 발생합니다.

데이터 집합이 XmlDataDocument에 바인딩되어 있는 경우 Clear 메서드를 호출하면 다음과 같은 예외가 throw됩니다.

System.InvalidOperationException: 데이터 집합이 로드된 XML 문서에 매핑되어 있으면 데이터 집합에서 테이블을 추가하거나 제거할 수 없습니다.

XmlDataDocument 개체에 바인딩된 데이터 집합에서 데이터를 지우려면 해당 테이블을 탐색하여 개별 DataRow 개체를 제거해야 합니다. 데이터 테이블에서 데이터 행 제거에 대한 자세한 내용은 방법: DataTable에서 행 삭제DataRowCollection.RemoveAt Method를 참조하십시오.

데이터 소스 창에서 항목을 끝 때 캡션 레이블이 올바르지 않습니다.

데이터 소스 창에서 항목을 끄는 경우 기본 정규식을 기준으로 열 이름이 수정됩니다. 열 이름에서 소문자 다음에 대문자가 나오는 경우 두 단어를 분할하기 위해 공백이 추가됩니다. 또한 열 이름에 있는 모든 밑줄은 공백으로 바뀝니다. 이 동작을 제어하는 데 대한 자세한 내용은 방법: Visual Studio에서 데이터 바인딩된 컨트롤에 대한 캡션을 만드는 방식 사용자 지정을 참조하십시오.

데이터를 페치하고 표시하는 속도가 느립니다.

프로젝트에서 BindingSource 구성 요소를 사용하는 경우 RaiseListChangedEvents를 False로 설정합니다. 이렇게 하면 목록에서 ListChanged 이벤트의 발생을 억제하여 대용량 데이터 집합의 성능을 향상시킬 수 있습니다.

Windows 2000에 설치한 후 응용 프로그램에 MDAC 2.8이 필요하다는 경고가 나타나면서 실패합니다.

System.Data 네임스페이스를 참조하는 모든 응용 프로그램은 MDAC(Microsoft Data Access Components) 버전 2.8 이상을 필요로 합니다. 대부분의 경우 필요한 파일은 운영 체제의 일부로 이미 설치되어 있습니다. 그러나 Windows 2000 서비스 팩 3 이하 버전을 실행하는 컴퓨터의 경우 응용 프로그램과 함께 이 구성 요소를 설치해야 할 수도 있습니다. 부트스트래퍼 패키지에 구성 요소를 추가하거나 설치를 진행하는 동안 Microsoft에서 파일을 다운로드하여 이 구성 요소를 설치할 수 있습니다. 자세한 내용은 필수 구성 요소 배포(Visual Studio)를 참조하십시오.

삽입 또는 업데이트 시 데이터베이스에서 생성된 값이 LINQ to SQL 클래스에 대해 NULL을 반환합니다.

LINQ to SQL은 identity(자동 증분), rowguidcol(데이터베이스에서 생성된 GUID) 및 timestamp 열에 대해 데이터베이스에서 생성된 값을 자동으로 처리합니다. 데이터베이스에서 생성된 값이 다른 형식의 열에 있으면 null 값이라는 예기치 않은 결과가 발생합니다. 데이터베이스에서 생성된 값을 반환하려면 수동으로 IsDbGenerated를 true로 설정하고 AutoSyncAlways, OnInsert 또는 OnUpdate 중 하나로 설정해야 합니다.

참고 항목

개념

데이터의 새로운 기능

데이터 표시 개요

기타 리소스

데이터 연습

데이터 액세스 시작

Visual Studio에서 데이터에 연결

데이터를 받기 위해 응용 프로그램 준비

데이터를 응용 프로그램으로 페치

Windows 응용 프로그램에서 폼에 데이터 표시

응용 프로그램에서 데이터 편집

데이터 유효성 검사

데이터 저장

LINQ to SQL