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

비밀번호

댓글 작성자
 




... 16  17  18  [19]  20  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13175정성태11/29/20226581오류 유형: 827. Python - ImportError: cannot import name 'html5lib' from 'pip._vendor'
13174정성태11/28/20224987.NET Framework: 2073. C# - VMMap처럼 스택 메모리의 reserve/guard/commit 상태 출력파일 다운로드1
13173정성태11/27/20225777.NET Framework: 2072. 닷넷 응용 프로그램의 스레드 스택 크기 변경
13172정성태11/25/20225449.NET Framework: 2071. 닷넷에서 ESP/RSP 레지스터 값을 구하는 방법파일 다운로드1
13171정성태11/25/20225138Windows: 214. 윈도우 - 스레드 스택의 "red zone"
13170정성태11/24/20225391Windows: 213. 윈도우 - 싱글 스레드는 컨텍스트 스위칭이 없을까요?
13169정성태11/23/20225982Windows: 212. 윈도우의 Protected Process (Light) 보안 [1]파일 다운로드2
13168정성태11/22/20225315제니퍼 .NET: 31. 제니퍼 닷넷 적용 사례 (9) - DB 서비스에 부하가 걸렸다?!
13167정성태11/21/20225340.NET Framework: 2070. .NET 7 - Console.ReadKey와 리눅스의 터미널 타입
13166정성태11/20/20225046개발 환경 구성: 651. Windows 사용자 경험으로 WSL 환경에 dotnet 런타임/SDK 설치 방법
13165정성태11/18/20224907개발 환경 구성: 650. Azure - "scm" 프로세스와 엮인 서비스 모음
13164정성태11/18/20225902개발 환경 구성: 649. Azure - 비주얼 스튜디오를 이용한 AppService 원격 디버그 방법
13163정성태11/17/20225800개발 환경 구성: 648. 비주얼 스튜디오에서 안드로이드 기기 인식하는 방법
13162정성태11/15/20226846.NET Framework: 2069. .NET 7 - AOT(ahead-of-time) 컴파일
13161정성태11/14/20226180.NET Framework: 2068. C# - PublishSingleFile로 배포한 이미지의 역어셈블 가능 여부 (난독화 필요성) [4]
13160정성태11/11/20226061.NET Framework: 2067. C# - PublishSingleFile 적용 시 native/managed 모듈 통합 옵션
13159정성태11/10/20229344.NET Framework: 2066. C# - PublishSingleFile과 관련된 옵션 [3]
13158정성태11/9/20225472오류 유형: 826. Workload definition 'wasm-tools' in manifest 'microsoft.net.workload.mono.toolchain' [...] conflicts with manifest 'microsoft.net.workload.mono.toolchain.net7'
13157정성태11/8/20226113.NET Framework: 2065. C# - Mutex의 비동기 버전파일 다운로드1
13156정성태11/7/20227079.NET Framework: 2064. C# - Mutex와 Semaphore/SemaphoreSlim 차이점파일 다운로드1
13155정성태11/4/20226551디버깅 기술: 183. TCP 동시 접속 (연결이 아닌) 시도를 1개로 제한한 서버
13154정성태11/3/20226023.NET Framework: 2063. .NET 5+부터 지원되는 GC.GetGCMemoryInfo파일 다운로드1
13153정성태11/2/20227327.NET Framework: 2062. C# - 코드로 재현하는 소켓 상태(SYN_SENT, SYN_RECV)
13152정성태11/1/20225926.NET Framework: 2061. ASP.NET Core - DI로 추가한 클래스의 초기화 방법 [1]
13151정성태10/31/20226124C/C++: 161. Windows 11 환경에서 raw socket 테스트하는 방법파일 다운로드1
13150정성태10/30/20226046C/C++: 160. Visual Studio 2022로 빌드한 C++ 프로그램을 위한 다른 PC에서 실행하는 방법
... 16  17  18  [19]  20  21  22  23  24  25  26  27  28  29  30  ...