티스토리 뷰



SQL Server, 오라클(Oracle), MySQL, 큐브리드(CUBRID), 파이어버드(Firebird)와 같은 데이터베이스(Database)를 VB.Net에서 사용하기를 다루기에 앞서 데이터베이스의 개념을 다루면 좋겠지만 생략하고 가장 많이 사용하는 관계형(Relational) 데이터베이스를 기준으로 이야기를 풀어나갔으면 합니다. 실상 데이터, 데이터베이스, 데이터베이스 관리 시스템(DBMS), 데이터베이스 시스템(DBS)은 비슷해 보이지만 서로 다른 의미를 갖습니다. 데이터베이스는 정보를 쉽게 접근 및 수정하고 관리할 수 있도록 구조화된 정보의 집합으로 관계형 데이터베이스는 테이블(table, relation)간의 관계를 정의하고 각 테이블은 행(row, tuple)과 열(column)로 조직화합니다. DBMS는 데이터베이스에 대한 접근을 제공하고 데이터베이스에 실제 관리를 수행하는 소프트웨어로 SQL Server, 오라클과 같은 제품은 DBMS를 의미합니다. 이러한 데이터베이스와 DBMS를 총괄하여 데이터베이스 시스템(DBS)이라 합니다. 통상 DBMS별로 데이터베이스를 관리하는 나름의 방법을 구사하기 때문에 데이터베이스 파일 상호간의 호환은 이루어지지 않습니다. 

VB.Net에서 가장 많이 사용하고 편리하게 데이터베이스를 사용할 수 있는 방법은 ADO.NET 입니다. ADO는 ActiveX Data Object를 의미합니다. 닷넷에서는 SQL Server에 대한 ADO.NET 드라이버는 기본적으로 제공하고 있지만 기타 다른 데이터베이스의 경우에는 별도의 드라이버를 사용해야만 합니다. 각 DBMS 별로 별도로 제공하고 있는 ADO.NET 드라이버는 닷넷에 내장되어 있는 SQL Server 드라이버와 사용 방법 및 개념, 구조가 거의 비슷하므로 SQL Server에 준용해서 사용하면 됩니다. 별도의 ADO.Net 드라이버를 제공하지 않는 DBMS의 경우에는 OLE DB(Object Linking and Embedding DataBase protocol) 드라이버나 ODBC(Open DataBase Connectivity) 드라이버를 사용할 수도 있습니다. SQL Server 연결을 위한 클래스로 SQLConnection을 제공하는데 오라클의 경우 OracleConnection, OLE DB의 경우 OleDbConnection, ODBC방식을 사용하면 OdbcConnection, MySQL DBMS는 MySQLConnection, 파이어버드는 FbConnection, 큐브리드는 CUBRIDConnection 클래스를 제공합니다. 앞에 붙은 접두어(prefix)만 다르고 나머지 이름과 사용 방법은 거의 동일합니다. 이러한 이름붙이기는 연결자가 아닌 다른 클래스에도 적용됩니다.


ADO.Net을 사용하는 과정에서 접하게 되는 주요 오브젝트로 위의 그림과 같은 연결자(Connection), 데이터어댑터(Data Adapter), 데이터셋(Dataset)을 들 수 있습니다. 커맨드(Command) 오브젝트, 데이터리더(Data Reader) 오브젝트를 통한 작업도 가능하지만 이번 포스팅은 데이터어댑터와 데이터셋 활용을 중심으로 다룰까 합니다. 데이터어댑터와 데이터셋을 활용하면 마치 엑셀 시트(Sheet)를 다루듯이 간편하게 데이터를 조회 및 갱신할 수 있습니다. 데이터베이스 질의 언어인 SQL을 사용하지 않고도 간편하게 데이터베이스 테이블에 대한 갱신, 삽입 및 추가도 할 수 있는 간편함이 있습니다. 


실제 코드 작성을 통한 스터디를 위해서 아직 데이터베이스를 설치하지 않으셨다면 "MS SQL 개발자 버전 설치하기"를 참조해서 데이터베이스를 먼저 준비하시기를 추천합니다.



위의 그림은 "PRODUCTS"라는 테이블을 생성하고 간단하게 테스트용 데이터를 삽입한 상태로 스키마는 좌측을 참조할 수 있습니다. 테이블 생성 및 테스트 데이터 삽입 스크립트는 아래와 같습니다.

CREATE TABLE PRODUCTS (
    ID VARCHAR(256) NOT NULL,
    REFERENCE VARCHAR(1024) NOT NULL,
    CODE VARCHAR(1024) NOT NULL,
    CODETYPE VARCHAR(1024),
    NAME VARCHAR(1024) NOT NULL,
    PRICEBUY DOUBLE PRECISION DEFAULT 0 NOT NULL,
    PRICESELL DOUBLE PRECISION DEFAULT 0 NOT NULL,
    CATEGORY VARCHAR(256) NOT NULL,
    TAXCAT VARCHAR(256) NOT NULL,
    ATTRIBUTESET_ID VARCHAR(256),
    STOCKCOST DOUBLE PRECISION,
    STOCKVOLUME DOUBLE PRECISION,
    ISCOM SMALLINT DEFAULT 0 NOT NULL,
    ISSCALE SMALLINT DEFAULT 0 NOT NULL,
    ISKITCHEN SMALLINT DEFAULT 0 NOT NULL,
    PRINTKB SMALLINT DEFAULT 0 NOT NULL,
    SENDSTATUS SMALLINT DEFAULT 0 NOT NULL,
    ISSERVICE SMALLINT DEFAULT 0 NOT NULL,
    DISPLAY VARCHAR(256),
    ISVPRICE SMALLINT DEFAULT 0 NOT NULL,
    ISVERPATRIB SMALLINT DEFAULT 0 NOT NULL,
    TEXTTIP VARCHAR(256) DEFAULT '',
    WARRANTY SMALLINT DEFAULT 0 NOT NULL,
    PRIMARY KEY (ID)
);

INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('4902430986021', '4902430986021', '4902430986021', '(p&g)비달사순살롱모이스춰85', 0, 0, '000', '001', 0,0,0,0,0,0, '(P&G)비달사순살롱모이스춰85', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('4902430117777', '4902430117777', '4902430117777', '(p&g)위스퍼센서울트라날개(중', 0, 0, '000', '001', 0,0,0,0,0,0, '(P&G)위스퍼센서울트라날개(중', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('4902430113205', '4902430113205', '4902430113205', '(p&g)페브리즈플러스(r)320ml', 0, 0, '000', '001', 0,0,0,0,0,0, '(P&G)페브리즈플러스(R)320ml', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801105905939', '8801105905939', '8801105905939', '(해태)nfc포도쥬스1.89l', 0, 0, '000', '001', 0,0,0,0,0,0, '(해태)NFC포도쥬스1.89L', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801105908657', '8801105908657', '8801105908657', '1,5머스켓1,5ℓ', 0, 0, '000', '001', 0,0,0,0,0,0, '1,5머스켓1,5ℓ', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801115111023', '8801115111023', '8801115111023', '1.5우유', 0, 3181.818182, '000', '001', 0,0,0,0,0,0, '1.5우유', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('2542648671887', '2542648671887', '2542648671887', '1.6하이트피쳐', 0, 4727.272727, '000', '001', 0,0,0,0,0,0, '1.6하이트피쳐', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('7925117467887', '7925117467887', '7925117467887', '17차', 0, 909.0909091, '000', '001', 0,0,0,0,0,0, '17차', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046902455', '8801046902455', '8801046902455', '2080 구취케어', 0, 1636.363636, '000', '001', 0,0,0,0,0,0, '2080 구취케어', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046902486', '8801046902486', '8801046902486', '2080 잇몸케어', 0, 1636.363636, '000', '001', 0,0,0,0,0,0, '2080 잇몸케어', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046886632', '8801046886632', '8801046886632', '2080 패밀리케어', 0, 1818.181818, '000', '001', 0,0,0,0,0,0, '2080 패밀리케어', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046892770', '8801046892770', '8801046892770', '2080 프레쉬그린민트', 0, 1818.181818, '000', '001', 0,0,0,0,0,0, '2080 프레쉬그린민트', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046862803', '8801046862803', '8801046862803', '2080 후레쉬업', 0, 2090.909091, '000', '001', 0,0,0,0,0,0, '2080 후레쉬업', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046878774', '8801046878774', '8801046878774', '2080그린 후레쉬', 0, 1727.272727, '000', '001', 0,0,0,0,0,0, '2080그린 후레쉬', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046848135', '8801046848135', '8801046848135', '2080그린치약(160g)', 0, 1636.363636, '000', '001', 0,0,0,0,0,0, '2080그린치약(160g)', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046057223', '8801046057223', '8801046057223', '2080덴탈치솔(오리지날)3+1', 0, 0, '000', '001', 0,0,0,0,0,0, '2080덴탈치솔(오리지날)3+1', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046837313', '8801046837313', '8801046837313', '2080덴탈크리닉칫솔', 0, 0, '000', '001', 0,0,0,0,0,0, '2080덴탈크리닉칫솔', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046867624', '8801046867624', '8801046867624', '2080동의생금치약', 0, 2909.090909, '000', '001', 0,0,0,0,0,0, '2080동의생금치약', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046843291', '8801046843291', '8801046843291', '2080미세모', 0, 0, '000', '001', 0,0,0,0,0,0, '2080미세모', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046838235', '8801046838235', '8801046838235', '2080어린이치약', 0, 1818.181818, '000', '001', 0,0,0,0,0,0, '2080어린이치약', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046847961', '8801046847961', '8801046847961', '2080어린이치약80g', 0, 0, '000', '001', 0,0,0,0,0,0, '2080어린이치약80g', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046892824', '8801046892824', '8801046892824', '2080에나멜 프로텍트', 0, 1818.181818, '000', '001', 0,0,0,0,0,0, '2080에나멜 프로텍트', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046879009', '8801046879009', '8801046879009', '2080울샴프', 0, 0, '000', '001', 0,0,0,0,0,0, '2080울샴프', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046902400', '8801046902400', '8801046902400', '2080잇몸케어', 0, 1636.363636, '000', '001', 0,0,0,0,0,0, '2080잇몸케어', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046877272', '8801046877272', '8801046877272', '2080청은차', 0, 2000, '000', '001', 0,0,0,0,0,0, '2080청은차', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046894644', '8801046894644', '8801046894644', '2080치약', 0, 1818.181818, '000', '001', 0,0,0,0,0,0, '2080치약', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046878750', '8801046878750', '8801046878750', '2080치약750', 0, 1727.272727, '000', '001', 0,0,0,0,0,0, '2080치약', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046902530', '8801046902530', '8801046902530', '2080치약530', 0, 1636.363636, '000', '001', 0,0,0,0,0,0, '2080치약', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046846056', '8801046846056', '8801046846056', '2080치약056', 0, 0, '000', '001', 0,0,0,0,0,0, '2080치약', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046864050', '8801046864050', '8801046864050', '2080치약(오리지날)170g', 0, 0, '000', '001', 0,0,0,0,0,0, '2080치약(오리지날)170g', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046862902', '8801046862902', '8801046862902', '2080키즈기획', 0, 0, '000', '001', 0,0,0,0,0,0, '2080키즈기획', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801046988251', '8801046988251', '8801046988251', '2080토탈케어', 0, 1818.181818, '000', '001', 0,0,0,0,0,0, '2080토탈케어', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8809129942039', '8809129942039', '8809129942039', '2단우산', 0, 5454.545455, '000', '001', 0,0,0,0,0,0, '2단우산', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8809129942053', '8809129942053', '8809129942053', '2단우산053', 0, 5454.545455, '000', '001', 0,0,0,0,0,0, '2단우산', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8809187742084', '8809187742084', '8809187742084', '2단우산084', 0, 5454.545455, '000', '001', 0,0,0,0,0,0, '2단우산', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801045208213', '8801045208213', '8801045208213', '2배 현미식초500ml', 0, 1727.272727, '000', '001', 0,0,0,0,0,0, '2배 현미식초500ml', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801045205212', '8801045205212', '8801045205212', '2배양조식초', 0, 1272.727273, '000', '001', 0,0,0,0,0,0, '2배양조식초', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801045205311', '8801045205311', '8801045205311', '2배양조식초 900', 0, 2636.363636, '000', '001', 0,0,0,0,0,0, '2배양조식초 900', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8801045208312', '8801045208312', '8801045208312', '2배현미식초900', 0, 2727.272727, '000', '001', 0,0,0,0,0,0, '2배현미식초900', 0, 0, '', 0);
INSERT INTO products (ID, REFERENCE, CODE, NAME, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, ISCOM, ISSCALE, ISKITCHEN, PRINTKB, SENDSTATUS, ISSERVICE, DISPLAY, ISVPRICE, ISVERPATRIB, TEXTTIP, WARRANTY)
VALUES ('8803336300132', '8803336300132', '8803336300132', '2중슬림모치솔', 0, 2272.727273, '000', '001', 0,0,0,0,0,0, '2중슬림모치솔', 0, 0, '', 0);

준비한 데이터베이스의 테이블을 읽어 엑셀 화면과 같은 데이터 그리드(Grid)에 입력하는 과정을 통해서 위에서 언급한 연결자, 데이터어댑터, 데이터셋의 실체를 만나볼까 합니다. 


우선 위의 그림과 같이 윈도우 폼에 버튼과 DataGridView 오브젝를 추가하고 버튼을 클릭하면 데이터베이에 연결하여 데이터를 읽고, 데이터그리드에 읽어온 데이터를 입력하는 단순한 절차로 구성합니다.

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim constr As String
    Dim conn As SqlConnection
    Dim adapter As SqlDataAdapter
    Dim ds As New DataSet

    constr = "Server=localhost\MYTEST;Database=TESTDB;User Id=sa;Password=mytest;"
    conn = New SqlConnection(constr)
    Try
        conn.Open()
        adapter = New SqlDataAdapter("SELECT * FROM products", conn)
        adapter.Fill(ds)
        conn.Close()
        DataGridView1.DataSource = ds.Tables(0)
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

연결자인 SqlConnection 생성 시점에 앞서 준비 과정에 생성했던 데이터베이스 인스턴스 이름과 데이터베이스 이름, 데이터베이스 사용자 아이디와 비밀번호를 입력합니다. 네트워크나 데이터베이스, 파일시스템과 같이 외부와 소통하는 기능을 수행할 경우에는 위의 예제와 같이 Try ... Catch...문장으로 혹여 발생할 수 있는 예외 상황을 대처할 수 있도록 해야 합니다. 연결자로 Open()이 성공하여 정상적으로 데이터베이스에 연결한 상태에서 INSERT, UPDATE, DELETE와 같은 DML도 수행할 수 있지만 예제에서는 데이터어댑터로 질의를 수행하고 결과를 데이터셋에 담아 두는(Fill) 간단한 작업만 수행했습니다. 주목할 점은 데이터셋은 데이터베이스와의 연결을 종료한 상태에서도 오브젝트가 유효하다는 점입니다. 예제에서도 conn.Close()로 데이터베이스와 연결을 종료시킨 이후에 데이터셋으로 데이터그리드뷰에 데이터를 설정했습니다.


위의 화면은 코드를 수행한 결과로 컬럼 이름등이 자동 설정되었음을 확인할 수 있습니다.



댓글
댓글쓰기 폼
«   2022/11   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함