Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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


Ui text box
sizemedium
typeinfo

Connection String

각 항목은 semicolon (;) 으로 구분되며, 다음을 사용할 수 있다.
동일 항목에 있는 여러 Keyword 는, 모두 같은 의미이다.

Keyword설명예제기본값

DSN
SERVER
HOST

HostnameDSN=localhost
SERVER=192.168.0.1

PORT
PORT_NO
Port No.PORT=56565656
USERID
USERNAME
USER
UID
사용자 IDUSER=SYSSYS
PASSWORD
PWD
사용자 패스워드PWD=manager
CONNECT_TIMEOUT
ConnectionTimeout
connectTimeout
연결 최대 시간CONNECT_TIMEOUT60초
COMMAND_TIMEOUT
commandTimeout
각 명령 수행 최대 시간COMMAND_TIMEOUT60초



MachCommand : DbCommand

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

...

필드설명
int MachErrorCodeMACHBASE 에서 제공하는 에러 코드


MachAppendWriter (error)MachAppendWriter

MachCommand 를 사용하는 별도의 클래스로 APPEND 를 지원한다.
ADO.NET 표준이 아닌, MACHBASE 의 Append Protocol 을 지원하기 위한 클래스이다.

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

...

별도의 생성자 없이 MachCommand 의 AppendOpen() 으로 생성된다.

메서드설명
void SetErrorDelegator(ErrorDelegateFuncType aFunc)에러가 발생했을 때 호출할 ErrorDelegateFunc 을 지정한다.


필드설명
SuccessCount입력 성공한 레코드 개수. AppendClose() 이후 설정된다.
FailureCount입력 실패한 레코드 개수. AppendClose() 이후 설정된다.
OptionAppendOpen() 때 입력받은 MachAppendOption


ErrorDelegateFuncType

Code Block
languagecsharp
public delegate void ErrorDelegateFuncType(MachAppendException e);

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

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


MachAppendException : MachException (error)MachException

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

...

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

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

...

MachTransaction

지원하지 않는다.



샘플 코드

...

연결 (error)연결

MachConnection 을 만들어 Open() - Close() 하면 된다.

Code Block
languagecsharp
String sConnString = String.Format("DSN={0};PORT_NO={1};UID=;PWD=MANAGER;CONNECT_TIMEOUT=10000;COMMAND_TIMEOUT=50000", SERVER_HOST, SERVER_PORT);
MachConnection sConn = new MachConnection(sConnString);
sConn.Open();
//... do something
sConn.Close();

using 구문을 사용하면, Connection 종료 작업인 Close() 를 호출하지 않아도 된다.

...

Code Block
languagecsharp
String sConnString = String.Format("DSN={0};PORT_NO={1};UID=;PWD=MANAGER;CONNECT_TIMEOUT=10000;COMMAND_TIMEOUT=50000", SERVER_HOST, SERVER_PORT);
using (MachConnection sConn = new MachConnection(sConnString))
{
    sConn.Open();
    //... do something
} // you don't need to call sConn.Close();


쿼리 수행

MachCommand 를 만들어 쿼리를 수행하면 된다.

Code Block
languagecsharp
String sConnString = String.Format("DSN={0};PORT_NO={1};UID=;PWD=MANAGER;CONNECT_TIMEOUT=10000;COMMAND_TIMEOUT=50000", SERVER_HOST, SERVER_PORT);
using (MachConnection sConn = new MachConnection(sConnString))
{
    String sQueryString = "CREATE TABLE tab1 ( col1 INTEGER, col2 VARCHAR(20) )";
    MachCommand sCommand = new MachCommand(sQueryString , sConn)
    try
    {
        sCommand.ExecuteNonQuery();
    }
    catch (MachException me)
    {
        throw me;
    }
}

이 역시 using 구문을 사용하면, MachCommand 해제 작업을 곧바로 진행할 수 있다.

Code Block
languagecsharp
String sConnString = String.Format("DSN={0};PORT_NO={1};UID=;PWD=MANAGER;CONNECT_TIMEOUT=10000;COMMAND_TIMEOUT=50000", SERVER_HOST, SERVER_PORT);
using (MachConnection sConn = new MachConnection(sConnString))
{
    String sQueryString = "CREATE TABLE tab1 ( col1 INTEGER, col2 VARCHAR(20) )";
    using(MachCommand sCommand = new MachCommand(sQueryString , sConn))
    {
        try
        {
            sCommand.

...

ExecuteNonQuery();
        }
        catch (MachException me)
        {
            throw me;
        }
    }
}


SELECT 수행

SELECT 쿼리를 가진 MachCommand 를 실행해 MachDataReader 를 얻을 수 있다.
MachDataReader 를 통해 레코드를 하나씩 Fetch 할 수 있다.

파라메터 바인딩 (error)

Ui text box
typeinfo

SELECT 에서는 지원되지 않습니다.

Code Block
languagecsharp
String sConnString = String.Format("DSN={0};PORT_NO={1};UID=;PWD=MANAGER;CONNECT_TIMEOUT=10000;COMMAND_TIMEOUT=50000", SERVER_HOST, SERVER_PORT);
using (MachConnection sConn = new MachConnection(sConnString))
{
    String sQueryString = "SELECT * FROM tab1;";
    using(MachCommand sCommand = new MachCommand(sQueryString , sConn))
    {
        try
        {
            MachDataReader sDataReader = sCommand.ExecuteReader();
            while (sDataReader.Read())
            {
                for (int i = 0; i < sDataReader.FieldCount; i++)
                {
                    Console.WriteLine(String.Format("{0} : {1}",
                                                    sDataReader.GetName(i),
                                                    sDataReader.GetValue(i)));
                }
            }
        }
        catch (MachException me)
        {
            throw me;
        }
    }
}


파라메터 바인딩 (error)

MachParameterCollection 을 생성한 다음, MachCommand 에 연결해서 수행할 수 있다.

Code Block

...

languagecsharp
String sConnString = String.Format("DSN={0};PORT_NO={1};UID=;PWD=MANAGER;", SERVER_HOST, SERVER_PORT);
using (MachConnection sConn = new MachConnection(sConnString))
{
    string sSelectQuery = @"SELECT *
        FROM tab2
        WHERE CreatedDateTime < @CurrentTime
          AND CreatedDateTime >= @PastTime";

    using (MachCommand sCommand = new MachCommand(sSelectQuery, sConn))
    {
        DateTime sCurrtime = DateTime.Now;
        DateTime sPastTime = sCurrtime.AddMinutes(-1);

        try
        {
            sCommand.ParameterCollection.Add(new MachParameter { ParameterName = "@CurrentTime", Value = sCurrtime });
            sCommand.ParameterCollection.Add(new MachParameter { ParameterName = "@PastTime", Value = sPastTime });

            MachDataReader sDataReader = sCommand.ExecuteReader();

            while (sDataReader.Read())
            {
                for (int i = 0; i < sDataReader.FieldCount; i++)
                {
                    Console.WriteLine(String.Format("{0} : {1}",
                                                    sDataReader.GetName(i),
                                                    sDataReader.GetValue(i)));
                }
            }
        }
        catch (MachException me)
        {
            throw me;
        }
    }
}




APPEND (error)

MachCommand 에서 AppendOpen() 을 수행하면, MachAppendWriter 객체를 얻을 수 있다.

...

AppendFlush() 를 하면 모든 레코드의 입력이 반영되며, AppendClose() 를 통해 Append 전체 과정을 종료할 수 있다.

{code:language=csharp