ADO.NET 드라이버 일부 기능을 지원하는 .NET (C#) Connector 라이브러리를 제공하고 있다. 

라이브러리 위치는 $MACHBASE_HOME/lib/ 에서 DLL 형태로 제공하고 있으며, .NET 버전에 따라 다른 DLL 을 제공한다.

클래스


아래 소개된 기능 외의 것은 아직 구현되어 있지 않거나, 올바르게 작동되지 않을 수 있다.
미구현으로 명시된 메서드나 필드를 부르는 경우, NotImplementedException 을 발생시킨다.

MachConnection

마크베이스와의 연결을 담당하는 클래스이다. DbConnection 과 같이 IDisposable 을 상속받기 때문에, Dispose() 를 통한 객체 해제나 using() 문을 이용한 객체의 자동 Dispose를 지원한다.

생성자설명
MachConnection(string aConnectionString)Connection String 을 입력으로, MachConnection 을 생성한다.


메서드설명
Open()입력받은 Connection String 으로 실제 연결을 시도한다.
Close()연결 중이라면, 해당 연결을 종료한다.
BeginDbTransaction(IsolationLevel isolationLevel)(미구현) MACHBASE 는 특별한 Transaction 이 없으므로 해당 객체 역시 지원하지 않는다.
CreateDbCommand()(미구현) 아직은, 명시적으로 MachCommand 를 만들도록 유도한다.
ChangeDatabase(string databaseName)

(미구현) MACHBASE 는 DATABASE 구분이 없다.


필드설명
StateSystem.Data.ConnectionState 값을 나타낸다.
StatusString연결된 MachCommand 로 수행하는 상태를 나타낸다.
Error Message 를 꾸미는 용도로 내부에서 사용되며, 작업이 시작된 상태를 나타내기 때문에 이 값으로 쿼리 상태를 체크하는 것은 적절하지 않다.
Database(미구현)
DataSource(미구현)
ServerVersion(미구현)


MachCommand

MachConnection 을 이용해 SQL 명령 또는 APPEND 를 수행하는 클래스이다.
DbCommand 와 같이 IDisposable 을 상속받기 때문에, Dispose() 를 통한 객체 해제나 using() 문을 이용한 객체의 자동 Dispose를 지원한다.

생성자설명
MachCommand(string aQueryString, MachConnection)연결할 MachConnection 객체와 함께, 수행할 쿼리를 입력해서 생성한다.
MachCommand(MachConnection)연결할 MachConnection 객체를 입력해서 생성한다. 수행할 쿼리가 없는 경우 (e.g. APPEND) 에만 사용한다.


메서드설명
void CreateParameter() /
void CreateDbParameter()
새로운 MachParameter 를 생성한다.
void Cancel()(미구현)
void Prepare()(미구현)
MachAppendWriter
AppendOpen(aTableName, aErrorCheckCount = 0, MachAppendOption = None)

APPEND 를 시작한다. MachAppendWriter 객체를 반환한다.

  • aTableName : 대상 테이블 이름
  • aErrorCheckCount : APPEND-DATA 로 입력한 레코드 누적 개수가 일치할 때 마다, 서버로 보내 실패 여부를 확인한다.
    말하자면, 자동 APPEND-FLUSH 지점을 정하는 셈이다.
  • MachAppendOption : 현재는 하나의 옵션만 제공하고 있다.
    • MachAppendOption.None : 아무런 옵션도 붙지 않는다.
    • MachAppendOption.MicroSecTruncated : DateTime 객체의 값 입력 시, microsecond 까지만 표현된 값을 입력한다.
      (DateTime 객체의 Ticks 값은 100 nanosecond 까지 표현된다.)
void
AppendData(MachAppendWriter aWriter, List<object> aDataList)

MachAppendWriter 객체를 통해, 데이터가 들어있는 리스트를 받아 데이터베이스에 입력한다.

  • List 에 들어간 데이터 순서대로, 각각의 자료형은 테이블에 표현된 컬럼의 자료형과 일치해야 한다.
  • List 에 들어있는 데이터가 모자라거나 넘치면, 에러를 발생시킨다.

ulong 객체로 시간 값을 표현할 때 주의사항은, MachAppendWriter 를 참고하도록 하자.


void
AppendDataWithTime(MachAppendWriter aWriter, List<object> aDataList, DateTime aArrivalTime)
AppendData() 에서, _arrival_time 값을 DateTime 객체로 명시적으로 넣을 수 있는 메서드이다.
void
AppendDataWithTime(MachAppendWriter aWriter, List<object> aDataList, ulong aArrivalTimeLong)

AppendData() 에서, _arrival_time 값을 ulong 객체로 명시적으로 넣을 수 있는 메서드이다.

ulong 객체로 시간 값을 표현할 때 주의사항은, MachAppendWriter 를 참고하도록 하자.


void AppendFlush(MachAppendWriter aWriter)

AppendData() 로 입력한 데이터들을 즉시 서버로 보내, 데이터 입력을 강제한다.

호출 빈도가 잦을 수록, 성능은 떨어지지만 시스템 오류로 인한 데이터 유실율을 낮출 수 있고 에러 검사를 빠르게 할 수 있다.
호출 빈도가 뜸할 수록, 데이터 유실이 발생할 가능성이 크고 에러 검사가 지연되지만 성능은 크게 올라간다.

void AppendClose(MachAppendWriter aWriter)APPEND 를 마친다. 내부적으로 AppendFlush() 를 호출한 뒤에 실제 프로토콜을 마친다.
int ExecuteNonQuery()

입력받았던 쿼리를 수행한다. 쿼리가 영향을 미친 레코드 개수를 반환한다.

보통 SELECT 를 제외한 쿼리를 수행할 때 사용한다.

object ExecuteScalar()

입력받았던 쿼리를 수행한다. 쿼리 Targetlist 의 첫 번째 값을 객체로 반환한다.

보통 SELECT 쿼리, 그 중에서도 결과가 1건만 나오는 SELECT (Scalar Query) 를 수행해 DbDataReader 없이 결과를 받고자 하는 경우 사용한다.

DbDataReader ExecuteDbDataReader(CommandBehavior aBehavior)

입력받았던 쿼리를 수행해, 해당 쿼리의 결과를 읽어 올 수 있는 DbDataReader 를 생성해 반환한다.


필드설명
Connection /
DbConnection
연결된 MachConnection.
ParameterCollection /
DbParameterCollection
Binding 목적으로 사용할 MachParameterCollection.
CommandText쿼리 문자열.
CommandTimeout

특정 작업 수행 중, 서버로부터 응답을 기다리기까지의 시간.

MachConnection 에 설정된 값을 따르며, 여기서는 값 참조만 할 수 있다.

FetchSize

한번에 서버로부터 Fetch 할 레코드 개수. 기본값은 3000 이다.

IsAppendOpenedAPPEND 작업 중인 경우, Append 가 이미 열려있는지 아닌지를 판단한다.
CommandType(미구현)
DesignTimeVisible(미구현)
UpdatedRowSource(미구현)


MachDataReader

Fetch 한 결과를 읽어들이는 클래스이다. 명시적으로 생성이 불가능하고 MachCommand.ExecuteDbDataReader() 로 생성된 객체만 사용이 가능하다.

메서드설명
string GetName(int ordinal)ordinal 번째 컬럼 이름을 반환한다.
string GetDataTypeName(int ordinal)ordinal 번째 컬럼의 자료형 이름을 반환한다.
Type GetFieldType(int ordinal)ordinal 번째 컬럼의 자료형을 반환한다.
int GetOrdinal(string name)컬럼 이름이 위치한 인덱스를 반환한다.
object GetValue(int ordinal)현재 위치한 레코드의 ordinal 번째 값을 반환한다.
bool IsDBNull(int ordinal)현재 위치한 레코드의 ordinal 번째 값이 NULL 인지 여부를 반환한다.
int GetValues(object[] values)현재 위치한 레코드의 모든 값들을 전부 설정하고, 그 개수를 반환한다.
xxxx GetXXXX(int ordinal)

ordinal 번째 컬럼 값을, 자료형 (XXXX) 에 맞춰 반환한다.

  • Boolean
  • Byte
  • Char
  • Int16/32/64
  • DateTime
  • String
  • Decimal
  • Double
  • Float
bool Read()다음 레코드를 읽는다. 결과가 존재하지 않으면 False 를 반환한다.
DataTable GetSchemaTable()(미지원)
bool NextResult()(미지원)


필드설명
FetchSize한번에 서버로부터 Fetch 할 레코드 개수. 기본값은 3000 이며 여기서는 수정할 수 없다.
FieldCount결과 컬럼 개수.
this[int ordinal]object GetValue(int ordinal) 와 동일하다.
this[string name]object GetValue(GetOrdinal(name)) 와 동일하다.
HasRows결과가 존재하는지 여부를 나타낸다.
RecordsAffectedMachCommand 의 것과 달리, 여기서는 Fetch Count 를 나타낸다.


MachParameter

MachCommand 에 필요한 파라메터를 바인딩하는 클래스이다.


MachException

마크베이스에서 나타나는 에러를 표시하는 클래스이다.

에러 메시지가 설정되어 있는데, 모든 에러 메시지는 MachErrorMsg 에서 확인할 수 있다.

MachAppendWriter

public sealed class MachAppendWriter

MachCommand 를 사용하는 별도의 클래스로 APPEND 를 지원한다.

ADO.NET 표준이 아닌, MACHBASE 의 Append Protocol 을 지원하기 위한 클래스이다.

생성자는 별도로 지원하지 않고, static method 인 Create() 로 객체를 생성할 수 있다.

create()설명
internal static MachAppendWriter Create(MachCommand aCommand, string aTableName)MachCommand 를 사용한다. Target Table Name 을 입력한다.
internal static MachAppendWriter Create(MachCommand aCommand, string aTableName, int aErrorCheckCount)


ErrorDelegateFuncType

MachAppendWriter 에서, APPEND 도중 MACHBASE 서버 측에서 발생하는 Error 를 감지하기 위한 함수를 지정할 수 있다.

.NET 에서는 이 함수형을 Delegator Function 으로 지정했는데, 그 함수형을 소개한다.

MachAppendException

public sealed class MachAppendException : MachException

MachException 과 동일하지만, 다음 점이 다르다.

해당 예외는 ErrorDelegateFunc 내부에서만 획득이 가능하다.

메서드설명
GetRowBuffer()에러가 발생한 데이터 버퍼를 획득할 수 있다.



샘플 코드