개발꿀팁 [.NET Core 3.1] SQLite DB 연동하기(with ActiveReports 14.2)
페이지 정보
작성자 하늘을날자 작성일 2020-10-27 11:11 조회 1,407회 댓글 0건본문
관련링크
안녕하세요? '하늘을 날자'입니다.
오늘은 이전 Access DB에 이어서 SQLite를 연동해 보았습니다.
저는 SQLite를 많이 사용하는 편입니다.
본격적으로 닷넷코어를 체험해 보기 위해서 이 글을 씁니다.
새로운 기술을 체험한다는 건 즐거운 일이죠^.^
Active Reports 14.2 와 연동이 잘 되나 살펴보아야겠지요?
닷넷프레임워크와 비교해서 크게 다르지는 않지만 예상치 못했던 에러가 나왔습니다.
항상 그러하듯이 돌발상황이 많은게 프로그래밍이죠. 에러를 많이 만날수록 지식은 더 많이 얻을 수 있죠.
긍정적으로 생각해야겠습니다.
[연결 문자열]
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를 테스트 해 보았습니다.
먼저 디자인을 미리 보기로 하죠. 간단하게 작성합니다.
[디자이너 화면]
섹션리포트(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 소스 코드를 작성합니다. 아래 그림처럼요...
[스크립트 축소/확대] * 이 기능은 개인적으로 정말 마음에 듭니다. 베리 굿!!
(3) Viewer 실행 결과
좋은 하루 되세요..
댓글목록
등록된 댓글이 없습니다.