2

동일한 서버에서 ASP.NET SOAP 웹 서비스를 호출하는 .NET3.5 Windows Forms 응용 프로그램이 있습니다. 그런 다음이 웹 서비스는 데이터를 SQL Server Express 2005 데이터베이스에 다시 동일한 서버에 저장합니다.저장 프로 시저에 액세스하는 중 오류가 발생했습니다.

응용 프로그램은 많은 고객뿐만 아니라 내부적으로도 배포되었으며 18 개월 이상 예상대로 작동했습니다. 그러나 이번 주 주요 고객 사이트에서 배포 된 10 대의 서버 중 4 대에서 오류 메시지가 생성되기 시작했습니다. 모든 웹 서비스 메서드는 동일한 연결 문자열을 사용하지만 하나의 웹 메서드 만 영향을받습니다.

연결 문자열이 형식은 다음과 같습니다

Data Source=MYSERVER\SQLEXPRESS;Initial Catalog=MyDatabase; 
Persist Security Info=True;User ID=MyUser;Password=MyPassword 

응용 프로그램이 하나 개의 특정 웹 서비스 메소드를 호출

, 에러를 생산 :

에 응용 프로그램에 변경 사항이 없습니다

Cannot find the user 'MyDatabase', because it does not exist or you do not have permission.

그러나 고객의 IT 담당자가 이러한 서버를 변경했을 수 있습니다. MyUser에 저장 프로 시저에 대한 사용 권한이 부여되어 다른 모든 웹 서비스 인터페이스에 연결할 수 있습니다.

나를 혼란스럽게하는 주요한 점은 오류 메시지가 연결 문자열에 Initial CatalogMyDatabase이라는 존재하지 않는다고 말합니다.

나는 고객과 함께 현장에 있었고 응용 프로그램이 올바르게 설정되어 있고 다른 모든 웹 서비스 인터페이스가 데이터베이스에 올바르게 연결되어 있는지 확인했습니다.

내가 확인할 수있는 가능한 원인이나 다른 제안 사항에 대한 제안은 감사의 뜻을 전합니다.

답변

1

dbo를 제거하지 말 것을 강력히 권합니다. 그것이 스키마 이름입니다. 단순히 그것을 제거하면 DB에 어쨌든 dbo 인 기본 스키마를 사용하게됩니다. 그래서 그것은 아무 것도 성취하지 못할 것입니다. 그러나 프로 시저를 호출 할 때 스키마 이름을 사용하지 않으면 명명 충돌이 발생할 수 있습니다. 예를 들어 DB에있는 두 개의 서로 다른 스키마에 같은 이름의 프로 시저가 있고 스키마 이름없이 호출하려고하면 DB는 어느 것을 호출해야하는지 알 수 없으므로 예외가 발생합니다.

+1

제 질문을 고맙습니다. "dbo"를 추가해야한다고 제안하고 있습니까? 어딘가에 연결 문자열에? 이 SQL Server 인스턴스에는 다른 데이터베이스가 설치되지 않으므로 명명 충돌이 없어야하며 연결 ​​문자열에 데이터베이스 이름을 지정해야 올바른 스키마에 액세스하고 올바른 프로 시저를 호출해야합니다. –