Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

닷넷에서 SAP Adaptive Server Enterprise 데이터베이스 사용

SAP의 ASE 데이터베이스가 있는데, 저도 처음 다운로드 받아서 테스트 환경을 구성해봤습니다. 근데, 실행 파일이름이 sqlsrvr.exe라서 자칫 마이크로소프트의 SQL 서버로 착각할 수 있습니다. ^^; 실행 파일 경로를 보면 답이 나오지만.

C:\SAP\ASE-16_0\bin\sqlsrvr.exe

어쨌든 테스트는 전통적인 ADO.NET 방식으로 동일하게 할 수 있습니다.

String host = "...";
String port = "5000";
String user = "...";
String pass = "...";

using (AseConnection conn = new AseConnection("PROVIDER=ASEOLEDB.1;Data Source='" +
    host + "';Port='" + port + "';UID='" + user + "';PWD='" + pass + "';Database='testdb';"))
{
    conn.Open();

    AseCommand cmd = new AseCommand("select * from testtable", conn);
    AseDataReader reader = cmd.ExecuteReader();
    StringBuilder sb = new StringBuilder();

    while (reader.Read())
    {
        sb.Append(reader.GetString(0));
    }

    Console.WriteLine("Result: " + sb.ToString());

    conn.Close();
}

이를 위해 서버 설치 시 함께 복사된 Sybase.AdoNet4.AseClient.dll, Sybase.AdoNet35.AseClient.dll 어셈블리를 닷넷 버전에 맞게 참조해서 쓰면 됩니다. 배포도 매우 쉬운데요. 참조한 그 Sybase.AdoNet???.AseClient.dll 어셈블리만 함께 배포하면 끝입니다. ^^

하지만, 아쉽게도 다음과 같은 오류가 발생하는군요. ^^

Exception thrown: 'Sybase.Data.AseClient.AseException' in Sybase.AdoNet4.AseClient.dll
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unhandled exception</Description><AppDomain>ConsoleApplication1.vshost.exe</AppDomain><Exception><ExceptionType>Sybase.Data.AseClient.AseException, Sybase.AdoNet4.AseClient, Version=16.0.2.0, Culture=neutral, PublicKeyToken=95d94fac46c88e1e</ExceptionType>
<Message>Could not load code page for requested charset</Message><StackTrace>   at Sybase.Data.AseClient1.AseConnection.Open()
   at Sybase.Data.AseClient.AseConnection.Open()
   at ConsoleApplication1.Program.Main(String[] args) in E:\ConsoleApplication1\Program.cs:line 22
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()</StackTrace>
<ExceptionString>Sybase.Data.AseClient.AseException: Could not load code page for requested charset
   at Sybase.Data.AseClient1.AseConnection.Open()
   at Sybase.Data.AseClient.AseConnection.Open()
   at ConsoleApplication1.Program.Main(String[] args) in E:\ConsoleApplication1\Program.cs:line 22
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()</ExceptionString></Exception></TraceRecord>

"Could not load code page for requested charset"라는 오류 메시지인데요. 이상한 점은 DB 설치 시에 cp850으로 했었기 때문에 다음과 같이 연결 문자열을 구성해도 마찬가지 오류가 발생한다는 것입니다.

PROVIDER=ASEOLEDB.1;Data Source=...;Port=5000;UID=...;PWD=...;Database='testdb';CHARSET=cp850

검색해 보니 다음의 글이 나오는데요.

Connecting to ASE 15.7 from Windows Server 2012 
; https://scn.sap.com/thread/3669701

cp850이 아닌, iso_1로 지정해야 된다는 것입니다. 어쨌든 다음과 같이 연결 문자열을 구성하면 잘 됩니다.

PROVIDER=ASEOLEDB.1;Data Source=...;Port=5000;UID=...;PWD=...;Database='testdb';CHARSET=iso_1

첨부한 파일은 위의 예제를 구성한 솔루션입니다.




설치 중에 발생했던 문제 하나 공유합니다. ^^ 제 경우에 다음과 같이 "Installing character set 'cp850'"이라는 메시지만 반복되면서 설치가 더 이상 진행되지 않는 현상이 있었습니다.

sybase_ase_install_1.png

Process Explorer로 보니 이때 실행 중인 셋업 프로세스의 하위로 charset.exe가 있었고 다음과 같은 명령행으로 실행중이었습니다.

charset.exe -STESTDBM -I"C:\SAP\ini\sql.ini" -L"C:\SAP\charsets\cp850" charset.loc

그래서, 그냥 혹시나 하고 직접 실행해 보았습니다.

C:\SAP\ASE-16_0\bin>C:\SAP\ASE-16_0\bin\charset.exe -STESTDBM -I"C:\SAP\ini\sql.ini" -L"C:\SAP\charsets\cp850" charset.loc
Please enter SA Password : Loading file 'charset.loc'.

Character set (ID = 2) with NAME = 'cp850' already exists
in the Syscharsets system table.  Do you wish to update this character set
with the definitions found in your localization file for character set
(ID = 2, NAME = 'cp850')?
(yes/no):  y


Finished loading the Character Set Definition.

Finished loading file 'charset.loc'.

잘 끝났군요. ^^ 그래서 그냥 프로세스 관리자에서 현재 셋업 프로세스가 붙잡고 있는 charset.exe를 강제 종료했고 이후 설치가 잘 진행되었습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 1/11/2016]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 106  [107]  108  109  110  111  112  113  114  115  116  117  118  119  120  ...
NoWriterDateCnt.TitleFile(s)
11282정성태8/26/201720391Math: 22. 행렬로 바라보는 피보나치 수열
11281정성태8/26/201722574.NET Framework: 677. Visual Studio 2017 - NuGet 패키지를 직접 참조하는 PackageReference 지원 [2]
11280정성태8/24/201720049디버깅 기술: 94. windbg - 풀 덤프에 포함된 모든 모듈을 파일로 저장하는 방법
11279정성태8/23/201731392.NET Framework: 676. C# Thread가 Running 상태인지 아는 방법
11278정성태8/23/201719829오류 유형: 417. TFS - Warning - Unable to refresh ... because you have a pending edit. [1]
11277정성태8/23/201720987오류 유형: 416. msbuild - error MSB4062: The "TransformXml" task could not be loaded from the assembly
11276정성태8/23/201724817.NET Framework: 675. C# - (파일) 확장자와 연결된 실행 파일 경로 찾기 [2]파일 다운로드1
11275정성태8/23/201734189개발 환경 구성: 323. Visual Studio 설치 없이 빌드 환경 구성 - Visual Studio 2017용 Build Tools [1]
11274정성태8/22/201720849.NET Framework: 674. Thread 타입의 Suspend/Resume/Join 사용 관련 예외 처리
11273정성태8/22/201722318오류 유형: 415. 윈도우 업데이트 에러 Error 0x80070643
11272정성태8/21/201726156VS.NET IDE: 120. 비주얼 스튜디오 2017 버전 15.3.1 - C# 7.1 공개 [2]
11271정성태8/19/201720083VS.NET IDE: 119. Visual Studio 2017에서 .NET Core 2.0 프로젝트 환경 구성하는 방법
11270정성태8/17/201732282.NET Framework: 673. C#에서 enum을 boxing 없이 int로 변환하기 [2]
11269정성태8/17/201722388디버깅 기술: 93. windbg - 풀 덤프에서 .NET 스레드의 상태를 알아내는 방법
11268정성태8/14/201722443디버깅 기술: 92. windbg - C# Monitor Lock을 획득하고 있는 스레드 찾는 방법
11267정성태8/10/201726103.NET Framework: 672. 모노 개발 환경
11266정성태8/10/201726241.NET Framework: 671. C# 6.0 이상의 소스 코드를 Visual Studio 설치 없이 명령행에서 컴파일하는 방법
11265정성태8/10/201754157기타: 66. 도서: 시작하세요! C# 7.1 프로그래밍: 기본 문법부터 실전 예제까지 [11]
11264정성태8/9/201725542오류 유형: 414. UWP app을 signtool.exe로 서명 시 0x8007000b 오류 발생
11263정성태8/9/201720878오류 유형: 413. The C# project "..." is targeting ".NETFramework, Version=v4.0", which is not installed on this machine. [3]
11262정성태8/5/201719443오류 유형: 412. windbg - SOS does not support the current target architecture. [3]
11261정성태8/4/201721887디버깅 기술: 91. windbg - 풀 덤프 파일로부터 강력한 이름의 어셈블리 추출 후 사용하는 방법
11260정성태8/3/201720380.NET Framework: 670. C# - 실행 파일로부터 공개키를 추출하는 방법
11259정성태8/2/201718927.NET Framework: 669. 지연 서명된 어셈블리를 sn.exe -Vr 등록 없이 사용하는 방법
11258정성태8/1/201720252.NET Framework: 668. 지연 서명된 DLL과 서명된 DLL의 차이점파일 다운로드1
11257정성태7/31/201719878.NET Framework: 667. bypassTrustedAppStrongNames 옵션 설명파일 다운로드1
... 106  [107]  108  109  110  111  112  113  114  115  116  117  118  119  120  ...