.NET Connector

.NET Connector

ADO.NET ๋“œ๋ผ์ด๋ฒ„ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” .NET (C#) Connector ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.ย 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์œ„์น˜๋Š”ย $MACHBASE_HOME/lib/ย ์—์„œ DLL ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, .NET ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅธ DLL ์„ ์ œ๊ณตํ•œ๋‹ค.

  • > .NET Framework 4.0 :ย machNetConnector.dll
  • > .NET Core 2.0 :ย machNetConnectorCore.dll

ํด๋ž˜์Šค


์•„๋ž˜ ์†Œ๊ฐœ๋œ ๊ธฐ๋Šฅ ์™ธ์˜ ๊ฒƒ์€ ์•„์ง ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š๊ฑฐ๋‚˜, ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
๋ฏธ๊ตฌํ˜„์œผ๋กœ ๋ช…์‹œ๋œ ๋ฉ”์„œ๋“œ๋‚˜ ํ•„๋“œ๋ฅผ ๋ถ€๋ฅด๋Š” ๊ฒฝ์šฐ, NotImplementedException ๋˜๋Š” NotSupportedException ์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.


๋งˆํฌ๋ฒ ์ด์Šค์™€์˜ ์—ฐ๊ฒฐ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. DbConnection ๊ณผ ๊ฐ™์ด IDisposable ์„ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์—, Dispose() ๋ฅผ ํ†ตํ•œ ๊ฐ์ฒด ํ•ด์ œ๋‚˜ using() ๋ฌธ์„ ์ด์šฉํ•œ ๊ฐ์ฒด์˜ ์ž๋™ Dispose๋ฅผ ์ง€์›ํ•œ๋‹ค.
MachConnection : DbConnection

์ƒ์„ฑ์ž์„ค๋ช…
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(๋ฏธ๊ตฌํ˜„)


Connection String

๊ฐ ํ•ญ๋ชฉ์€ semicolon (;) ์œผ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๋™์ผ ํ•ญ๋ชฉ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ Keyword ๋Š”, ๋ชจ๋‘ ๊ฐ™์€ ์˜๋ฏธ์ด๋‹ค.

Keyword์„ค๋ช…์˜ˆ์ œ๊ธฐ๋ณธ๊ฐ’

SERVER

HostnameSERVER=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์ดˆ

์˜ˆ์ œ๋กœ, ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ค€๋น„ํ•ด ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

String sConnString = String.Format("SERVER={0};PORT_NO={1};UID=;PWD=MANAGER;CONNECT_TIMEOUT=10000;COMMAND_TIMEOUT=50000", SERVER_HOST, SERVER_PORT);


MachCommand : DbCommand

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 ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ์ž๋ผ๊ฑฐ๋‚˜ ๋„˜์น˜๋ฉด, ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
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 ๊ฐ’์„ _arrival_time ๊ฐ’์œผ๋กœ ์ž…๋ ฅํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š” ์œ„์˜ AppendData() ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

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 : DbDataReader

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 ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.


MachParameterCollection :ย DbParameterCollection

MachCommand ์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

๋ฐ”์ธ๋”ฉํ•œ ์ดํ›„์— ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ๊ฐ’์ด ๊ฐ™์ด ์ˆ˜ํ–‰๋œ๋‹ค.ย 

Prepared Statement ๊ฐœ๋…์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์•„, Binding ์ดํ›„ย Execute ๋ฅผ ํ•ด๋„ ์ˆ˜ํ–‰ ์„ฑ๋Šฅ์€ ์ตœ์ดˆ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.


๋ฉ”์„œ๋“œ์„ค๋ช…
MachParameter
Add(string parameterName, DbType dbType)
ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ด๋ฆ„๊ณผ ํƒ€์ž…์„ ์ง€์ •ํ•ด, MachParameter ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
์ถ”๊ฐ€๋œ MachParameter ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
int Add(object value)๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ถ”๊ฐ€๋œ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
void AddRange(Array values)๋‹จ์ˆœ ๊ฐ’์˜ ๋ฐฐ์—ด์„ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•œ๋‹ค.
MachParameter
AddWithValue(string parameterName, object value)
ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ด๋ฆ„๊ณผ ๊ทธ ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
์ถ”๊ฐ€๋œ MachParameter ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
bool Contains(object value)ํ•ด๋‹น ๊ฐ’์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
bool Contains(string value)ํ•ด๋‹น ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ด๋ฆ„์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.
void Clear()ํŒŒ๋ผ๋ฉ”ํ„ฐ๋“ค์„ ๋ชจ๋‘ ์‚ญ์ œํ•œ๋‹ค.
int IndexOf(object value)ํ•ด๋‹น ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
int IndexOf(string parameterName)ํ•ด๋‹น ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ด๋ฆ„์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
void Insert(int index, object value)ํŠน์ • ์ธ๋ฑ์Šค์—, ํ•ด๋‹น ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
void Remove(object value)ํ•ด๋‹น ๊ฐ’์„ ํฌํ•จํ•œ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
void RemoveAt(int index)์ธ๋ฑ์Šค์— ์œ„์น˜ํ•œ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
void RemoveAt(string parameterName)ํ•ด๋‹น ์ด๋ฆ„์„ ๊ฐ€์ง„ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
ํ•„๋“œ์„ค๋ช…
CountํŒŒ๋ผ๋ฉ”ํ„ฐ ๊ฐœ์ˆ˜
this[int index]index ๋ฒˆ์งธ์˜ MachParameter ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
this[string name]ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋Š” ์ˆœ์„œ์˜ MachParameter ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.


MachParameter : DbParameter

MachCommand ์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ ๊ฐ๊ฐ ๋ฐ”์ธ๋”ฉํ•œ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ํด๋ž˜์Šค์ด๋‹ค.

ํŠน๋ณ„ํžˆ ๋ฉ”์„œ๋“œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•„๋“œ์„ค๋ช…
ParameterNameํŒŒ๋ผ๋ฉ”ํ„ฐ ์ด๋ฆ„
Value๊ฐ’
Size๊ฐ’์˜ ํฌ๊ธฐ
Direction

ParameterDirection (Input / Output / InputOutput / ReturnValue)

๊ธฐ๋ณธ๊ฐ’์€ Input ์ด๋‹ค.

DbTypeDB Type
MachDbType

MACHBASE DB Type

DB Type ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

IsNullableNULL ๊ฐ€๋Šฅ ์—ฌ๋ถ€
HasSetDbTypeDB Type ์ด ์ง€์ •๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€


MachExceptionย : DbException

๋งˆํฌ๋ฒ ์ด์Šค์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ์—๋Ÿฌ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.

์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”๋ฐ, ๋ชจ๋“  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋Š”ย MachErrorMsgย ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•„๋“œ์„ค๋ช…
int MachErrorCodeMACHBASE ์—์„œ ์ œ๊ณตํ•˜๋Š” ์—๋Ÿฌ ์ฝ”๋“œ


MachAppendWriter

MachCommand ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ APPEND ๋ฅผ ์ง€์›ํ•œ๋‹ค.
ADO.NET ํ‘œ์ค€์ด ์•„๋‹Œ, MACHBASE ์˜ Append Protocol ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋‹ค.

๋ณ„๋„์˜ ์ƒ์„ฑ์ž ์—†์ด MachCommand ์˜ AppendOpen() ์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

๋ฉ”์„œ๋“œ์„ค๋ช…
void SetErrorDelegator(ErrorDelegateFuncType aFunc)์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ˜ธ์ถœํ•  ErrorDelegateFunc ์„ ์ง€์ •ํ•œ๋‹ค.
ํ•„๋“œ์„ค๋ช…
SuccessCount์ž…๋ ฅ ์„ฑ๊ณตํ•œ ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜. AppendClose() ์ดํ›„ ์„ค์ •๋œ๋‹ค.
FailureCount์ž…๋ ฅ ์‹คํŒจํ•œ ๋ ˆ์ฝ”๋“œ ๊ฐœ์ˆ˜. AppendClose() ์ดํ›„ ์„ค์ •๋œ๋‹ค.
OptionAppendOpen() ๋•Œ ์ž…๋ ฅ๋ฐ›์€ MachAppendOption


ErrorDelegateFuncType

public delegate void ErrorDelegateFuncType(MachAppendException e);

MachAppendWriter ์—์„œ, APPEND ๋„์ค‘ MACHBASE ์„œ๋ฒ„ ์ธก์—์„œ ๋ฐœ์ƒํ•˜๋Š” Error ๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

.NET ์—์„œ๋Š” ์ด ํ•จ์ˆ˜ํ˜•์„ Delegator Function ์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.


MachAppendException : MachException

MachException ๊ณผ ๋™์ผํ•˜์ง€๋งŒ, ๋‹ค์Œ ์ ์ด ๋‹ค๋ฅด๋‹ค.

  • ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์„œ๋ฒ„ ์ธก์œผ๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹ ๋œ๋‹ค.
  • ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ๋‹ค. (comma-separated) ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•ด ๋‹ค์‹œ APPEND ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋กํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๋‹น ์˜ˆ์™ธ๋Š” ErrorDelegateFunc ๋‚ด๋ถ€์—์„œ๋งŒ ํš๋“์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฉ”์„œ๋“œ์„ค๋ช…
GetRowBuffer()์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.


MachTransaction

์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.



์ƒ˜ํ”Œ ์ฝ”๋“œ


์—ฐ๊ฒฐ

MachConnection ์„ ๋งŒ๋“ค์–ด Open() - Close() ํ•˜๋ฉด ๋œ๋‹ค.

String sConnString = String.Format("SERVER={0};PORT_NO={1};UID=;PWD=MANAGER;", SERVER_HOST, SERVER_PORT);
MachConnection sConn = new MachConnection(sConnString);
sConn.Open();
//... do something
sConn.Close();

using ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด, Connection ์ข…๋ฃŒ ์ž‘์—…์ธ Close() ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

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


์ฟผ๋ฆฌ ์ˆ˜ํ–‰

MachCommand ๋ฅผ ๋งŒ๋“ค์–ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

String sConnString = String.Format("SERVER={0};PORT_NO={1};UID=;PWD=MANAGER;", 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 ํ•ด์ œ ์ž‘์—…์„ ๊ณง๋ฐ”๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

String sConnString = String.Format("SERVER={0};PORT_NO={1};UID=;PWD=MANAGER;", 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 ํ•  ์ˆ˜ ์žˆ๋‹ค.

String sConnString = String.Format("SERVER={0};PORT_NO={1};UID=;PWD=MANAGER;", 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 ์— ์—ฐ๊ฒฐํ•ด์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

String sConnString = String.Format("SERVER={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 ๊ฐ์ฒด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ฐ์ฒด์™€ MachCommand ๋ฅผ ์ด์šฉํ•ด, ์ž…๋ ฅ ๋ ˆ์ฝ”๋“œ 1๊ฑด์„ ๋ฆฌ์ŠคํŠธ๋กœ ์ค€๋น„ํ•ด AppendData() ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ž…๋ ฅ์ด ์ด๋ค„์ง„๋‹ค.

AppendFlush() ๋ฅผ ํ•˜๋ฉด ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์˜ ์ž…๋ ฅ์ด ๋ฐ˜์˜๋˜๋ฉฐ, AppendClose() ๋ฅผ ํ†ตํ•ด Append ์ „์ฒด ๊ณผ์ •์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.

String sConnString = String.Format("SERVER={0};PORT_NO={1};UID=;PWD=MANAGER;", SERVER_HOST, SERVER_PORT);
using (MachConnection sConn = new MachConnection(sConnString))
{
    using (MachCommand sAppendCommand = new MachCommand(sConn))
    {
        MachAppendWriter sWriter = sAppendCommand.AppendOpen("tab2");
        sWriter.SetErrorDelegator(AppendErrorDelegator);

        var sList = new List<object>();
        for (int i = 1; i <= 100000; i++)
        {
            sList.Add(i);
            sList.Add(String.Format("NAME_{0}", i % 100));

            sAppendCommand.AppendData(sWriter, sList);

            sList.Clear();

            if (i % 1000 == 0)
            {
                sAppendCommand.AppendFlush();
            }
        }

        sAppendCommand.AppendClose(sWriter);
        Console.WriteLine(String.Format("Success Count : {0}", sWriter.SuccessCount));
        Console.WriteLine(String.Format("Failure Count : {0}", sWriter.FailureCount));
    }
}
        private static void AppendErrorDelegator(MachAppendException e)
        {
            Console.WriteLine("{0}", e.Message);
            Console.WriteLine("{0}", e.GetRowBuffer());
        }