...
필드 | 설명 |
---|---|
State | System.Data.ConnectionState 값을 나타낸다. |
StatusString | 연결된 MachCommand 로 수행하는 상태를 나타낸다. Error Message 를 꾸미는 용도로 내부에서 사용되며, 작업이 시작된 상태를 나타내기 때문에 이 값으로 쿼리 상태를 체크하는 것은 적절하지 않다. |
Database | (미구현) |
DataSource | (미구현) |
ServerVersion | (미구현) |
Ui text box | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||
Connection String각 항목은 semicolon (;) 으로 구분되며, 다음을 사용할 수 있다.
|
MachCommand : DbCommand
MachConnection 을 이용해 SQL 명령 또는 APPEND 를 수행하는 클래스이다.
DbCommand 와 같이 IDisposable 을 상속받기 때문에, Dispose() 를 통한 객체 해제나 using() 문을 이용한 객체의 자동 Dispose를 지원한다.
...
필드 | 설명 |
---|---|
int MachErrorCode | MACHBASE 에서 제공하는 에러 코드 |
MachAppendWriter
MachAppendWriter
MachCommand 를 사용하는 별도의 클래스로 APPEND 를 지원한다.
ADO.NET 표준이 아닌, MACHBASE 의 Append Protocol 을 지원하기 위한 클래스이다.
생성자는 별도로 지원하지 않고, static method 인 Create() 로 객체를 생성할 수 있다.
...
별도의 생성자 없이 MachCommand 의 AppendOpen() 으로 생성된다.
메서드 | 설명 |
---|---|
void SetErrorDelegator(ErrorDelegateFuncType aFunc) | 에러가 발생했을 때 호출할 ErrorDelegateFunc 을 지정한다. |
필드 | 설명 |
---|---|
SuccessCount | 입력 성공한 레코드 개수. AppendClose() 이후 설정된다. |
FailureCount | 입력 실패한 레코드 개수. AppendClose() 이후 설정된다. |
Option | AppendOpen() 때 입력받은 MachAppendOption |
ErrorDelegateFuncType
Code Block | ||
---|---|---|
| ||
public delegate void ErrorDelegateFuncType(MachAppendException e); |
MachAppendWriter 에서, APPEND 도중 MACHBASE 서버 측에서 발생하는 Error 를 감지하기 위한 함수를 지정할 수 있다.
.NET 에서는 이 함수형을 Delegator Function 으로 지정했는데, 그 함수형을 소개한다지정한다.
MachAppendException : MachException
MachException
MachException 과 동일하지만, 다음 점이 다르다.
...
해당 예외는 ErrorDelegateFunc 내부에서만 획득이 가능하다.
메서드 | 설명 |
---|---|
GetRowBuffer() | 에러가 발생한 데이터 버퍼를 획득할 수 있다. |
...
MachTransaction
지원하지 않는다.
샘플 코드
...
연결
연결
MachConnection 을 만들어 Open() - Close() 하면 된다.
Code Block | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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 할 수 있다.
파라메터 바인딩 
Ui text box | ||
---|---|---|
| ||
SELECT 에서는 지원되지 않습니다. |
Code Block | ||
---|---|---|
| ||
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;
}
}
} |
파라메터 바인딩 
MachParameterCollection 을 생성한 다음, MachCommand 에 연결해서 수행할 수 있다.
Code Block |
---|
...
| ||
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 
MachCommand 에서 AppendOpen() 을 수행하면, MachAppendWriter 객체를 얻을 수 있다.
...
AppendFlush() 를 하면 모든 레코드의 입력이 반영되며, AppendClose() 를 통해 Append 전체 과정을 종료할 수 있다.
{code:language=csharp