Background Image

FORUM

2016.04.19 20:53

에러 문의

조회 수 10438 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
  Windows 10
CUBRID Ver.
  9.3.0
CUBRID TOOL Ver.
[도움말]-[버전정보] 확인
응용 환경(API)
  c#

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------


           adapter.Fill(dt); 부분에서

           예외 발생: 'CUBRID.Data.CUBRIDClient.CUBRIDException'(CUBRID.Data.dll)

          에러가 납니다. 튕겨나가지는 않고 에러가 나지만 그대로 수행이 됩니다.

          adapter.fill의 에러번호를 보면 1이고 에러를 찾아보면  index's column is not object이 나옵니다.

          에러가 안나게 할 수 있나요?


           CUBRID.Data.dll의    파일버젼은    9.3.0.1 입니다.

         

          소스의 일부는 아래와 같습니다.


--- 소스

  DataTable dt = new DataTable();
            try
            {
                using (CUBRIDConnection conn = new CUBRIDConnection())
                {
                    conn.ConnectionString = Utils.connString;
                    conn.Open();

                    using (CUBRIDCommand cmd = new CUBRIDCommand(sql, conn))
                    {
                       cmd.CommandType = CommandType.Text;
                       CUBRIDDataAdapter adapter = new CUBRIDDataAdapter(cmd);
                       adapter.Fill(dt);
                   }

                    conn.Close();
                }
            }
            catch (Exception exp)
            {
                throw new Exception(exp.Message);
            }

  • ?
    진우진 2016.04.20 00:09

    주어진 코드와 오류 내용만으로는 원인을 알 수 없습니다.

    DataAdapter를 이용한 예제 소스를 아래에 첨부하였으니 참고하시기 바랍니다.


    using CUBRID.Data.CUBRIDClient;

    using System.Diagnostics;

    using System.Data;

    using System;


    // DataTableExample namespace 선언(namespace는 Object들의 범위)

    namespace DataTableExample

    {

        class Program    // Program class 설정

        {


            /* CUBRIDCommand의 ExecuteNonQuery() 메소드를 호출하는 ExecuteSQL 메소드 정의 */

            private static void ExecuteSQL(string sql, CUBRIDConnection conn)

            {

                using (CUBRIDCommand cmd = new CUBRIDCommand(sql, conn))

                {

                    cmd.ExecuteNonQuery();

                }

            }


            /* 테이블명을 입력받아 Row의 수를 int형 값으로 리턴하는 GetTableRowsCount() 메소드 정의 */

            private static int GetTableRowsCount(string tableName, CUBRIDConnection conn)

            {

                int count = -1;

                string sql = "select count(*) from `" + tableName + "`";


                using (CUBRIDCommand cmd = new CUBRIDCommand(sql, conn))

                {

                    /* 단순히 숫자를 반환받기 위해 ExecuteScalar() 메소드 호출 */

                    count = (int)cmd.ExecuteScalar();

                }


                return count;

            }


            static void Main(string[] args)

            {

                string sb = "server=192.168.174.128;database=demodb;port=33000;user=public;password=;charset=utf-8";

                /* 커넥션 URL을 sb 변수에 배정 */


                using (CUBRIDConnection conn = new CUBRIDConnection())

                {


                    conn.ConnectionString = sb; // ConnectionString에 URL 값을 배정

                    conn.Open(); // 커넥션 수립


                    ExecuteSQL("drop table if exists t", conn); // t 테이블이 이미 존재할 시 DROP

                    ExecuteSQL("create table t(dt datetime, name varchar)", conn); // t 테이블 생성

                    ExecuteSQL("insert into t values('3/31/2016 10:20:30.040', '테스트')", conn); // 데이터 INSERT



                    ExecuteSQL("drop table if exists tbl", conn); // tbl 테이블이 이미 존재할 시 DROP


                    // CUBRIDCommand 객체 cmd를 생성, ExecuteNonQuery() 메소드를 통해 tbl 테이블 CREATE

                    using (CUBRIDCommand cmd = new CUBRIDCommand("create table tbl(a int, b varchar(20))", conn))

                    {

                        cmd.ExecuteNonQuery();

                    }


                    /* 매개변수를 이용한 쿼리 수행 */

                    using (CUBRIDCommand cmd = new CUBRIDCommand("insert into tbl values(?, ?)", conn))

                    {

                        CUBRIDParameter p1 = new CUBRIDParameter("?p1", CUBRIDDataType.CCI_U_TYPE_INT);

                        /* CUBRIDParameter 객체 p1을 생성, 타입을 INT로 지정 */


                        p1.Value = 1; // 첫째 매개변수의 값을 1로 배정

                        cmd.Parameters.Add(p1); // p1을 첫번째 파라미터로 추가


                        CUBRIDParameter p2 = new CUBRIDParameter("?p2", CUBRIDDataType.CCI_U_TYPE_STRING);

                        /* CUBRIDParameter 객체 p2를 생성, 타입을 STRING으로 지정 */


                        p2.Value = "문자열"; // p2의 값을 '문자열' 로 배정

                        cmd.Parameters.Add(p2); // p2를 두번째 파라미터로 추가


                        cmd.ExecuteNonQuery(); // 쿼리 수행

                    }


                    /* CUBRIDDataAdapter 객체 생성을 통한 테이블 컨트롤 (sql String 변수를 통해 SQL 구문을 전달하여 데이터를 받는다) */

                    String sql = "select * from nation order by `code` DESC LIMIT 10";

                    using (CUBRIDDataAdapter da = new CUBRIDDataAdapter(sql, conn))

                    {


                        // 파라미터를 이용한 데이터 INSERT를 위해 CUBRIDCommand 객체인 daInsert 생성

                        CUBRIDCommand daInsert = new CUBRIDCommand("insert into nation values(?,?,?,?)", conn);

                        daInsert.CommandType = CommandType.Text; // 객체 생성 시 쿼리를 Text로 입력하였으므로 Text로 설정


                        //Parameter1: code

                        daInsert.Parameters.Add(new CUBRIDParameter("?p1", DbType.String));

                        daInsert.Parameters["?p1"].SourceVersion = DataRowVersion.Current;

                        daInsert.Parameters["?p1"].SourceColumn = "code"; // 첫번째 파라미터의 DataSet을 code 컬럼으로 설정

                        daInsert.Parameters["?p1"].SourceColumnNullMapping = false;

                        /* 컬럼이 NULL을 허용한다면 SourceColumnNullMapping을 true, 아니면 false 로 설정 */


                        //Parameter2: name

                        daInsert.Parameters.Add(new CUBRIDParameter("?p2", DbType.String));

                        daInsert.Parameters["?p2"].SourceVersion = DataRowVersion.Original;

                        daInsert.Parameters["?p2"].SourceColumn = "name"; // 두번째 파라미터의 DataSet을 name 컬럼으로 설정

                        daInsert.Parameters["?p2"].SourceColumnNullMapping = false;


                        //Parameter3: continent

                        daInsert.Parameters.Add(new CUBRIDParameter("?p3", DbType.String));

                        daInsert.Parameters["?p3"].SourceVersion = DataRowVersion.Current;

                        daInsert.Parameters["?p3"].SourceColumn = "continent"; // 세번째 파라미터의 DataSet을 continent 컬럼으로 설정

                        daInsert.Parameters["?p3"].SourceColumnNullMapping = false;


                        //Parameter4: capital

                        daInsert.Parameters.Add(new CUBRIDParameter("?p4", DbType.String));

                        daInsert.Parameters["?p4"].SourceVersion = DataRowVersion.Original;

                        daInsert.Parameters["?p4"].SourceColumn = "capital"; // 네번째 파라미터의 DataSet을 capital 컬럼으로 설정

                        daInsert.Parameters["?p4"].SourceColumnNullMapping = false;


                        daInsert.UpdatedRowSource = UpdateRowSource.None;

                        // DataAdapter에서 Update 메소드를 수행할때 DataRow에 어떻게 적용되는지 설정 (None 으로 설정하면 반환된 결과가 DataSet에 저장되지 않음)



                        da.InsertCommand = daInsert;

                        // DataAdapter 의 INSERT 명령을 daInsert에 설정한대로 작동하도록 설정


                        DataTable dt = new DataTable("nation");

                        da.Fill(dt);

                        /* Fill() 메소드는 DataAdapter의 SelectCommand 결과로 DataTable 객체인 dt를 채우는 역할을 한다. */


                        DataRow newRow = dt.NewRow(); // 행 입력을 위한 DataRow 객체 newRow 생성

                        newRow["code"] = "ZZZ";

                        newRow["name"] = "ABCDEF";

                        newRow["capital"] = "하하";

                        newRow["continent"] = "QWERTY";


                        dt.Rows.InsertAt(newRow, 0);

                        // newRow를 dt의 0번 인덱스 위치로 INSERT


                        da.Update(dt);

                        /* DataAdapter의 Update() 메소드를 통해 dt에 변경된 내역에 대해 INSERT, UPDATE, DELETE 등의 SQL문들을 호출한다. */


                        dt.AcceptChanges(); // 변경된 내용 모두 commit


                        /* Console.WriteLine() 메소드를 이용해 dt의 0번 인덱스 Row에 있는 capital 컬럼의 값을 콘솔 창에 출력 */

                        Console.WriteLine(dt.Rows[0]["capital"].ToString());


                        /* Debug 모드에서 값을 체크하기 위해 Debug.Assert 메소드 사용 */

                        Debug.Assert(dt.Rows[0]["capital"].ToString() == "하하");

                        Debug.Assert(newRow.RowState.ToString() != "New");

                    }


                    /* Debug 모드에서 값을 체크하기 위해 Debug.Assert 메소드 사용 */

                    Debug.Assert(GetTableRowsCount("nation", conn) == 216);

                    // 코드 상단에 정의한 GetTableRowsCount() 메소드를 통해 특정 컬럼의 row 수를 리턴받고 그 값이 216이 아니면 경고 창 생성)


                    //Revert changes

                    ExecuteSQL("delete from nation where `code` = 'ZZZ'", conn);

                    // 마지막에 추가한 code 컬럼의 값이 'ZZZ' 인 row DELETE


                    Debug.Assert(GetTableRowsCount("nation", conn) == 215);

                    // nation 컬럼의 수가 215가 아니면 경고 창 생성


                    conn.Close(); // 커넥션 종료

                }

            }

        }

    }



List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 49
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
1094 DBCP사용중 CUBRID** 계열 클래스를 사용하려면? 1 안지민 2010.01.14 10270
1093 outer join / java stored function 의 혼용에 따른 문제 1 kst 2013.10.29 10279
1092 부팅시 [데이터베이스 서버 가동] 자동으로 되는 방법 3 까망이 2010.07.22 10283
1091 rownum vs limit 1 소라게 2013.07.30 10289
1090 컴퓨터 부팅 시 Unable to register the CUBRID Service Tray.Retry? 메세지 문의 1 file conomia 2013.03.04 10291
1089 unload / load 에러 관련 objects, schema 정보관련 질문입니다. 2 potter 2009.12.04 10292
1088 CUBRID 최초 설치하고 실행시 오류 2 완초 2009.09.03 10300
1087 서버컴 접속이 안되요 3 경아 2009.07.28 10308
1086 큐브리드 서버 연결 문제 7 file javamaster 2014.04.03 10308
1085 DB링크 기능이 아직도 않되나요? 1 먹는용 2014.08.18 10312
1084 한글이 깨지네요 2 썬해바라기 2009.12.16 10314
1083 SQL 쿼리 속도문제 1 칭칭이 2013.10.17 10314
1082 컬럼 설명 입력시 오류발생 1 file 이쭌 2013.07.05 10317
1081 복제 지연 로그의 최대 라인수 지정 디폴트값?? 2 닉넴 2011.05.27 10322
1080 ha 스크립트 완료 문구 뜬후에... 5 QA 2013.09.27 10335
1079 DB 실행 오류 24 한종희 2010.09.28 10351
1078 큐브리드 매니저에서 오류 5 file 초보 2010.02.10 10354
1077 asp 레퍼런스가 있나요? 1 바다왕자님 2010.01.21 10357
1076 큐브라이더 신청은 어떻게 하나요? 3 아놀두 2009.06.04 10374
1075 한글깨짐 문제입니다 2 라히 2014.08.06 10383
Board Pagination Prev 1 ... 141 142 143 144 145 146 147 148 149 150 ... 200 Next
/ 200

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales