! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

[.NET Core 3.1] SQLite DB 연동하기(with ActiveReports 14.2) > 지식 쉐어링

본문 바로가기

ActiveReports.NET

지식 쉐어링

개발꿀팁 [.NET Core 3.1] SQLite DB 연동하기(with ActiveReports 14.2)

페이지 정보

작성자 하늘을날자 작성일 2020-10-27 11:11 조회 1,401회 댓글 0건

본문

   안녕하세요? '하늘을 날자'입니다.   

오늘은 이전 Access DB에 이어서 SQLite를 연동해 보았습니다.

저는 SQLite를 많이 사용하는 편입니다.​

본격적으로 닷넷코어를 체험해 보기 위해서 이 글을 씁니다.

새로운 기술을 체험한다는 건 즐거운 일이죠^.^

Active Reports 14.2 와 연동이 잘 되나 살펴보아야겠지요?

 

닷넷프레임워크와 비교해서 크게 다르지는 않지만 예상치 못했던 에러가 나왔습니다.

항상 그러하듯이 돌발상황이 많은게 프로그래밍이죠. 에러를 많이 만날수록 지식은 더 많이 얻을 수 있죠.

긍정적으로 생각해야겠습니다.​

[연결 문자열]

545411b831278d6f97f1486922d381f0_1604531077_407.PNG
<연결 문자열 사용 예제>

sqliteConn = new SQLiteConnection(@"Data Source='//192.168.0.107/myhome/insadb.sqlite';Version=3;New=False;Compress=True"); 

어떤 에러를 만났을까요? 한가지 소개해 드리겠습니다.

System.Reflection.TargetInvocationException이 발생합니다.

(1) System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation 

 >>이 에러를 만났을 때 조금 당황했습니다. 기존에는 잘 동작하던 코드인데요. 에러를 뿜어냅니다.

이미 경험해 보신 분은 바로 해결을 하실테죠. 

​(저는) 항상 그렇게 해왔듯이 일단은 돌아가게 해 놓고 원인분석과 정상적인 코드를 작성하고자 합니다. 


1) 에러 발생 추정 #1: 데이터베이스가 열려있는 상태에서 다시 열려고 할 때 발생한다고 추정

- 예상 처리 방안: 상태를 체크하여 강제로 닫는다

                         테스트 코드를 작성하여 삽입한다

if (sqlConn.MyConn.State == ConnectionState.Closed) {

                    dbconn.MyConn.Close();

                    MessageBox.Show("Closed");

                }

- 테스트 코드 처리 결과: 테스트 중

- 관련 기술 자료 검색 자료: 확인 중.


2) 에러 발생 추정 #2: 플랫폼 문제(Any CPU --> x86)

 

[Viewer 폼 추가 코드]​

/*

10/28 현재, System.Data.SQLite가 1.0.113.3으로 업데이트 되었습니다.

https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

[임시 조치]

DB Connection 추가, Form Load에 넣어도 됩니다 

Report Script에서 Connection이 있는데도 무용지물이더군요. ​

*/​

 

sqliteConn = new SQLiteConnection("Data Source=" + Application.StartupPath + "\\Database3.sqlite;Version=3;New=False;Compress=True");

[중간생략]

​rpt.AddScriptReference(Application.StartupPath + "\\System.Data.SQLite.dll");

​ viewer1.LoadDocument(rpt);

[Viewer 폼 기존 사용했던 코드]​

[중간생략]​

 rpt.AddScriptReference(Application.StartupPath + "\\System.Data.SQLite.dll");

​ viewer1.LoadDocument(rpt);

 

* 이제 Microsoft 어셈블리로 교체해 보겠습니다. 이 코드도 잘 동작하네요.

초록색 부분만 잘 보시면 될 것 같습니다.

using System.Data;

using Microsoft.Data.Sqlite; // ver 5.0.0-rc.2.204575.6

using System.Globalization;

SqliteConnection SqlConn;

SqliteDataReader dr; 

// System.Data.SQLite.dll에 적용했던 코드와 어떻게 다른가 살펴 보아야겠습니다.

public void ActiveReport_ReportStart(){

rpt.DataSource = "";

SqlConn = new SqliteConnection(@"Data Source=Database3.sqlite"); //데이터베이스 파일명

string sql = "Select id,uname,uaddr from usertbl";

         SqliteCommand cmd = new SqliteCommand(sql, SqlConn);

cmd.CommandTimeout = 60;

if(SqlConn.State == System.Data.ConnectionState.Closed){

SqlConn.Open();

}

dr = cmd.ExecuteReader();

}


두번째 DB인 SQLite를 사용해서 Section Report를 테스트 해 보았습니다.

먼저 디자인을 미리 보기로 하죠. 간단하게 작성합니다.

 

[디자이너 화면]

8bef81e829814ddae6082e0aa50a0d98_1603764409_7973.PNG
 


섹션리포트(rpx) 작성의 백미(?)는 역시나 스크립트 작성이었습니다. 

예전에는 누리지 못했던 편리함을 맛 보았습니다.

다름 아닌 Ctrl + 마우스 스크롤입니다. 스크립트를 확대할 수 있다는 게 제겐 너무 편리합니다.


닷넷프레임워크에서 사용했던 코드를 그대로 사용해 보았습니다. 

1.Nuget이나 SQLite 공식 홈페이지를 통해 System.Data.SQLite 어셈블리를 설치합니다.

2.기존 사용했던 Section Report 스크립트를 그대로 사용합니다.

(System.Data.SQLite.dll 사용)

(1) Section Report(xml-based): 스크립트 작성

 - Microsoft.Data.Sqlite 도 같이 테스트 해보겠습니다.


(2) Viewer Form 소스 코드를 작성합니다. 아래 그림처럼요...


[스크립트 축소/확대]    * 이 기능은 개인적으로 정말 마음에 듭니다. 베리 굿!!

8bef81e829814ddae6082e0aa50a0d98_1603765809_5133.PNG
 

 (3) Viewer 실행 결과

8bef81e829814ddae6082e0aa50a0d98_1603765921_4866.PNG
 

좋은 하루 되세요..​

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.