FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[4574] Re:Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다.
초보자 [aakya] 4333 읽음    2013-02-25 10:06
저도 C#을 사용하기 때문에..

SELECT문을 쿼리로 날려 데이터를 받고 싶으시다면..

ExcuteNonQuery(); 가 아닌..

ExcuteReader()나 ExcuteScalar()를 사용하시면 됩니다..

저 같은 경우는 SELECT 중복검사할 열 FROM TABLE 명을 Scalar나 Reader로 받아 처리하곤 했는데요..

코드상으로는 이렇게...

Sql = "SELECT * FROM USERINFO WHERE NAME='" + UI쪽에서 불러오는 텍스트명 + "' AND AGE='" + UI쪽에서 불러오는 텍스트명 + "';";

object result = fbUSER.ExcuteScalar(Sql);

Reader함수는 그냥 제가 쓰기 편할려고 이렇게 작성하였구요...(Scalar도 비슷하게..)

public FbDataReader ExcuteReader(string SQLQuery)
        {
            SQLsyntax = SQLQuery;
            //fbCon.Open();                     
            //ft = fbCon.BeginTransaction();
            fc = new FbCommand(SQLsyntax, fbCon, ft);
            //fc.CommandType = CommandType.Text;
            fr = fc.ExecuteReader();
            //ft.Commit();
            //fbCon.Close();          
            //fc.Dispose();
            //fr.Close();
            return fr;
        }

최상위 클래스인 object형으로 데이터를 받는거죠..

하나라도 존재한다면 NAME열의 값이 리턴될꺼에요..

없다면 null 값이 리턴될테고..(맞는지는 디버깅해봐야 알듯..)

DATASET으로 받았을 때 대략 DB의 데이터만큼 메모리를 먹고 들어갑니다...

대신 메모리에  DB와 같은 테이블을 만들어 사용한다고 하네요.. 사용할때는 빠르지요..(디비에 연결해서 Data받아오는 속도만큼 나오는 것 같네요..)

READER로는 한번 사용하면 라인으로 읽는다고 하네요.. While문으로 Read.. Read..

사용하기 나름이겠지만요.. 그리고 방대한 DB의 데이터가 어느정도일지는 모르겠지만..

엑셀로 변환할 때 프로그램이 멈춘다는 느낌을 받을 정도의 시간이 걸렸습니다.. 대략 몇백? 몇십만건이였던 것 같은데..

DB용량은 대략 1G바이트정도였구요...

그정도의 데이터가 아니라면 중복체크는 가능하다고 판단되네요..

한번 해보세요..^^; 저도 전문가는 아니라 답변이 될지는 모르겠네요..

그리고 저도 궁금한 것도 많고 필요한 것도 많아서.. 필요하면 서로 공유하면서 하면 좋겠네요..

입문자 님이 쓰신 글 :
: 박우성님 kylix님 초보자님 감사합니다!
: 제가 아직 개념조차 부족해서 답변을 봐도 잘 못하겠네요..ㅎㅎ
: cmd창에서 select문을 써서 확인은 가능한데..
: C#에서 cmd.CommandText = "SELECT ......"; 을 해주고 cmd.ExecuteNonQuery();를 해주면 쿼리문이 실행되면서 변경된 라인이 몇개인지에 대해 리턴이 되는거 같더라고요.. 그래서 select문에 대한 리턴값을 확인 불가능하더라고요ㅜ
:
: 아 그리고 유니크 인덱스를 만드는것은 태이블내에 필드값중에 유니크한 값을 만드는거 아닌가요?
: 입문한지 얼마 되지 않아서 어리버리한거 같네요..ㅜㅜ
:
: C#내에서 select문을 CommandText에 넣어주고, select문에 대한 리턴갑을 어떻게 받아야하는지..
: 그리고 만약 DB내에 방대한 자료를 갖게 된다면 검색하는데 시간이 많이 소요되나요..?
: 그렇다면 제가 원하는 필드에 대해 Super Key로 선언하고, try catch로 중복 요류라고 나오는 부분에 대해 하는게 더 빠를까요?
: 공부를 하다보니까 궁금한점이 계속 생기네요..ㅜ
: 일단 혼자서 열심히 코딩해보겠습니다!
:
: 다시한번 진심으로 감사드립니다!!!!!!!!!!~
:
:
: 입문자 님이 쓰신 글 :
: : 안녕하세요?
: : DB초보자 입니다.
: : C#과 FireBird를 이용해서 프로그램을 하고있는데요 PK로 index가 있고, 자동 증가 시켜서 문제없이 하고 있습니다.
: : 다른 필드는 중복되어도 되는데, ComName은 중복이 되면 안되서요..
: : INSERT INTO table_name(index, aa, bb, cc, ComName) VALUES("GEN_ID(seq_index, 1), 'aa', 'bb', 'cc', 'comName');
: : 이런식으로 DB에 추가해주는데요 문제는 comName이 중복이 되는지 체크하고, 중복이 안되면 넣고, 중복이 되면 표시를 해줘야합니다ㅜ
: :
: : comName도 PK로 선언하고, try catch문으로 중복이 되는 오류에 대해 프로그래밍을 해야하나요?
: : 검색해서 하게 되면 DB에 자료가 많으면 시간이 많이 걸릴꺼같고요..
: :
: : 중복을 확인하는 sql문이 있을까요? 아니면 다른 좋은 방법이 없을까요?ㅜㅜ
: :
: : 혼자 힘으로 해결하려다가 DB는 초보자라.. 검색을 해도 잘 모르겠어서 질문 남깁니다!
: : 감사합니다!

+ -

관련 글 리스트
4567 Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. 입문자 2305 2013/02/20
4590     Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. brio 2530 2013/03/15
4573     Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. 입문자 2229 2013/02/25
4574         Re:Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. 초보자 4333 2013/02/25
4575             Re:Re:Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. 입문자 2471 2013/02/25
4576                 Re:Re:Re:Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. 초보자 2329 2013/02/25
4572     Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. 박우성 2269 2013/02/22
4568     Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. kylix 2020 2013/02/20
4569         Re:Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. 입문자 1907 2013/02/21
4571             Re:Re:Re:Insert를 할 때 중복되는 자료가 있는지 확인하는 방법을 알고 싶습니다. 초보자 2384 2013/02/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.