본문 바로가기

개발 이야기163

데이터베이스 SQL SELECT 최대 개수 제한하기 Mssql, 오라클 Oracle 데이터베이스를 오래 사용하다보면 데이터가 너무 많이 쌓여서 조회할때 시간이 너무 지연되는 경우가 있습니다. 그럴경우를 대비하여 SQL 쿼리문으로 최대 출력되는 행의 개수를 제한할수 있는데요 각각 데이터베이스 DATA BASE 마다 다르니 잘 참고해서 사용해야합니다. - 오라클 - 오라클 DB에서 SELECT 데이터 최대 개수 조절은 조건문에 ROWNUM 컬럼을 이용하면되는데요 ROWNUM 컬럼은 오라클 데이터베이스에 각 데이터 컬럼에 기본적으로 포함되어있는 컬럼이라고 보면 됩니다. SELECT * FROM 테이블명 WHERE ROWNUM 2023. 1. 13.
C# try catch 예외문 직접 예외 (동적 catch) 코딩을 하면서 에러가 발생하는 모든부분을 에러처리해두면 되긴하지만 항상 예상치 못한 에러는 발생하기 마련입니다. ​ 그러한 부분에 대해서 대비하기 위해 가장 좋은 방법은 try catch를 통해 예외 상황에 대해서 대비하는 것인데요 ​ 구현한 코딩을 구현하는데 있어 문제가 발생하는 경우 프로그램에서 알아서 에러처리를 해줍니다. ​ 이렇게 try catch 문을 이용해서 프로그램에서 발생하는 에러를 방지할수 있지만 직접 예외를 발생시켜 코딩을 더 효율적으로 구현할수 있는데요 ​ 아래와 같이 new Exception("발생메시지") 를 이용하면 됩니다. ​ 이미 코딩에서 알수있듯이 자체예외를 발생한 이후로 try에서 catch문으로 넘어가서 try의 그 이후 부분은 실행되지 않습니다. ​ 결과는 아래와 같습.. 2023. 1. 9.
C# 배열복사 에러 예외 ArrayTypeMismatchException C언어에 메모리복사를 하는 memcpy가 있듯이 C#에서도 유사하게 배열을 복사할수 있는데요 ​ 바로 Array.Copy를 이용하는 방법입니다. ​ 그런데 이 Array.Copy를 이용하다 에러가 발생하였습니다. ​ ArrayTypeMismatchException 에러 인데요 ​ 한번 코드를 살펴보겠습니다. ​ char[] chState = new byte[4]; byte[] byState = new byte[4]; Array.Copy(chState, 0, byState, 0, 4); // 에러 발생 ArrayTypeMismatchException 코드를 보면 char 배열을 byte 배열로 복사를 하려고 해서 에러가 발생하였습니다. ​ 다른 타입으로 복사하는 거면 몰라도 같은 1byte인데도 다른 타입.. 2023. 1. 7.
C# 형변환 캐스팅 모음 정리 안녕하세요 마블랑입니다. C# 닷넷 프로그래밍을 하다보면 정수에서 문자열로, 문자열에서 실수형으로 등등 변수의 형태를 변경해야할때가 많은데요 이것을 형변환(캐스팅)이라고 합니다. 대부분의 프로그래밍 언어를 배운 분들이라면 변수에 따라서 길이가 다 정해져있고 길이가 작은 변수에서 큰 변수로 변환할때는 암시적 형변환을 사용해서 어렵지 않게 할수있습니다. 대는 소를 포함하니까요 그런데 길이가 큰 변수에서 작은 변수로 형변환을 하려고 할때는 암시적 형변환으로는 컴파일 조차 되지 않는것으로 알고있는데요 그때 닷넷에서는 어떻게 해야 형변환을 할수있는지 정리해 보았습니다. 아래 화면처럼 직접 형변환을 해보았는데요 보기 어려워서 화면 아래 다시 정리해 두었습니다. 형변환을 할때 문자열에서 형변환 할때는 Parse함수를.. 2021. 1. 17.
C# Canvas 위에 도형 원 그리기 안녕하세요 마블랑입니다. 이번 포스팅은 간단하게 C# 프로세스에서 Canvas 위에 도형을 그려보려고 합니다. C#이라고 해도 WPF 에서 실습을 했기 때문에 윈폼에서는 동작할지 잘 모르겠군요 윈폼에서 코드가 실행이 안된다고 하면 다른 윈폼 소스를 찾아봐야할거 같습니다. 도형 그리기는 윈도우 프로세스에서 기본적인 것이라 방법이 달라도 도형그리는 법은 있으니까요 C# 에서도 도형을 그리는 법이 다양한데요 지금은 도형객체를 생성한 뒤에 캔버스에 추가하는 방법으로 진행해보려고 합니다. 먼저 사각형을 추가하는 법에 대해서 알아보겠습니다. Rectangle rect = new Rectangle();//사각형 객체 생성 rect.Width = 150;//사각형 넓이 지정 rect.Height = 150;//사각형 .. 2020. 12. 23.
C# 폴더 파일 읽기 윈도우탐색기 만들기 안녕하세요 마블랑입니다. 프로그래밍을 배우면서 처음 기초를 배우고 어느정도 프로그래밍에 대해서 알게되었다면 실력을 기르기 위해서는 이미 기존에 있는 프로그램을 똑같이 만들어보는것이 좋을거라고 생각합니다. 쉽게 따라서 만들수 있는 윈도우 기본 프로그램 중에는 윈도우 탐색기, 메모장, 그림판 등이 있는데요 그중에서 윈도우 탐색기의 기본이 되는 현재 지정된 폴더 내부의 하위폴더와 파일을 가져와보도록 하려고 합니다. C#에서 제공하는 DirectoryInfo 클래스를 이용하면 쉽게 탐색기를 만들수 있습니다. DirectoryInfo는 해당 폴더에 대한 정보가 담겨져있는 클래스인데요 GetFiles() 함수를 이용하면 내부 폴더까지도 접근할수 있게됩니다. 사용은 아래와 같이 하면 됩니다. DirectoryInfo.. 2020. 12. 23.
MSSQL DB 테이블 컬럼 추가 삭제 변경 안녕하세요 마블랑입니다. 이번 포스팅은 MSSQL 등 데이터 베이스를 사용할때 설계때 미처 생각지도 못한 컬럼을 추가해야할때 사용할수 있는 테이블에 컬럼을 추가하는 방법에 대해서 알아보겠습니다. 테스트는 MSSQL을 통해서 진행을 하였는데 오라클이나 Mysql 등 다른 데이터베이스도 가능한지는 모르겠습니다~ 1. 테이블 컬럼 추가 이미 생성되어있는 테이블에서 컬럼을 추가하거나 변경할때는 ALTER 명령어를 사용합니다. 먼저 구문을 보고 설명하는게 좋겠군요 ALTER TABLE [테이블명] ADD [추가할 컬럼명] [추가할 컬럼 타입] 위 ALTER 구문에 테이블명이나 컬럼명, 컬럼타입을 알맞게 넣으시고 실행시켜주면 되는데요 KEY나 NOT NULL 등 컬럼의 속성도 지정할수 있습니다. NOT NULL 같.. 2020. 11. 28.
C# List<> Find검색 안녕하세요 마블랑입니다. C# 닷넷 프레임워크에서 다른 프로그래밍 언어의 기능에는 없는 유용한 기능중에 하나가 List라고 생각합니다. 특히 구조체 단위의 데이터 리스트를 사용할때 굉장히 좋습니다. 아마도 다른 프로그래밍 언어에서는 배열을 사용해야 할텐데요. 그러면 배열의 위치인 인덱스나 메모리등을 잘 관리해야할것입니다. List 는 요소를 잘 추가해주기만 하면 데이터 삭제나 데이터 변경이 아주 용이 합니다. 게다가 배열로도 변환할 수도 있어 닷넷으로 프로그래밍 할때는 배열보다는 List를 먼저 사용하곤 합니다. 이번 포스팅은 이 List 클래스에 이미 데이터가 들어가 있는 상태에서 어떻게 데이터를 찾을 수 있는지 알아보겠습니다. 배열같은 경우나 List 클래스의 기능을 이용하지 않는다면 아래처럼 반복문.. 2020. 11. 24.
윈도우 프로세스 오류 이벤트 뷰어 로그 보기 안녕하세요 마블랑입니다. 윈도우 프로그램을 개발완료하고 배포를 하였는데 미처 처리하지 못한 예외사항에서 에러가 발생할수 있습니다 이런경우 대개 프로그램이 죽어서 꺼지게 되는데요 디버그 상황이 아닌지라 어느 부분에서 에러가 발생하여 프로세스가 죽었는지 유추하기 힘든데요 윈도우에서 제공하는 기능을 사용하면 직접 개발한 프로그램이 어느 부분에서 어떠한 이유로 에러가 발생하였는지 알 수 있습니다. 윈도우10 기준으로 컴퓨터 관리 항목에 이벤트 뷰어라고 윈도우에서 발생한 로그를 볼수있는 기능이 있습니다. 어떻게 프로그램에서 발생한 오류를 볼수 있는지 알아보도록 하겠습니다~ 우선 직접만든 에러가 발생하는 프로그램으로 프로세스가 에러를 발생하며 직접 꺼지게 해보겠습니다. 프로세스가 강제로 종료된 후에 [ 내 PC ].. 2020. 11. 16.
C# WebBrowser NavigateToString 한글 안녕하세요 마블랑입니다. C#에서 WPF나 윈폼으로 GUI 프로세스를 구현할때 사용하는 컨트롤 중에 인터넷 페이지같은 웹브라우저를 구현할수 있는 WebBrowser 컨트롤이 있습니다 보통 다음이나 네이버같은 주소를 입력해주거나 HTML 파일을 따로 만들어서 WebBrowser 컨트롤에 불러와서 사용할수 있는데요 이러한 방법들도 있지만 동적으로 사용자가 입력한 HTML페이지를 직접 띄워줄수도 있습니다. WebBrowser 클래스의 NavigateToString함수를 이용하면 가능합니다. 예제를 통해 NavigateToString 함수를 사용해보도록 하겠습니다. 웹브라우저 컨트롤을 쓰려면 당연히 먼저 웹브라우저 컨트롤을 선언해줘야합니다. 위와 같은 방법도 있지만 동적으로 웹브라우저 컨트롤을 추가하는 방법도 .. 2020. 11. 11.
C# 모니터 정보 가져오기 안녕하세요 마블랑입니다. 요새 회사에서 일할때나 집에서 PC환경을 꾸밀때 듀얼모니터 등 모니터를 한대만 사용하는 것이 아니라 두대 이상 사용하는 경우가 많은데요 특히 관제시스템을 만들때 여러 화면을 한번에 봐야하기 때문에 한대의 데스크톱에 여러대의 모니터를 연결해서 사용할때가 많습니다. 그러면서 프로세스를 원하는 모니터에 출력을 해줘야하는데요 C#으로 만든 프로세스는 Screen 클래스를 이용해서 현재 연결된 모니터들의 정보를 가져오고 프로세스를 위치를 원하는 모니터에 표시할수 있습니다 아래는 예제 코드 입니다. Screen[] Monitor = Screen.AllScreens; for (int i = 0; i < Monitor.Length; i++) { Console.WriteLine(i + "번째 모.. 2020. 10. 23.
C# 윈도우 프로세스 실행매개변수 안녕하세요 마블랑입니다. C언어를 처음 배울때 임베디드를 한다고 리눅스에서 C언어를 배웠었습니다. C언어로 프로세스를 만든다음에 항상 매개변수를 넣어줘서 소켓통신 IP나 Port, 또는 파일명 심지어 파이프에서 전송할 데이터를 입력을 해줬었습니다. ./Add 1 2 3 Result : 6 이런식을 매개변수를 넣어주고 결과를 출력하고 했었습니다. 콘솔 커맨드라인에서는 이런식으로 프로세스가 실행될때 매개변수를 넣어주지만 윈도우 프로그램은 더블클릭하면 실행이 되기때문에 어떻게 매개변수를 주고 입력된 매개변수를 어떻게 처리해야되는지 몰랐었습니다. 그래서 이번에는 윈도우 프로세스에서 매개변수를 처리하는 방법에 대해서 알아보았습니다. 우선 WPF 프로세스를 사용해서 매개변수를 처리해보겠습니다. Winform(원폼).. 2020. 10. 22.
C# Random 난수 생성 Next 범위 안녕하세요 마블랑입니다. C#으로 프로그래밍하면서 난수 생성이 필요할때는 Random 클래스를 사용합니다. Random 클래스에서 Next 함수를 이용하면 굉장히 쉽게 난수를 생성해서 사용할수 있는데요 만약에 Next 함수를 이용해서 난수를 생성할때 특정 범위 내에서 난수를 생성하고 싶으면 Random.Next(int Max) 처럼 최대값 매개변수를 넣어주면 되는데요 정수형 값이 들어갔으므로 최소값 0부터 매개변수의 값 사이의 난수가 생성됩니다. 그런데 한가지 알아야할 점은 매개변수의 값보다 작은값이 나온다는것 입니다. 예를 들어 Random.Next(10) 이렇게 코드를 구현해주면 정수형 0 ~ 9까지의 난수가 생성되는 것 입니다 그럼 Random클래스에서 난수를 생성할때 최소값도 지정해보겠습니다. R.. 2020. 10. 6.
C# 닷넷 임계영역 뮤텍스 안녕하세요 마블랑입니다. Thread(쓰레드)를 이용한 프로그래밍을 할때 공통된 변수에 동시에 접근하면 데이터가 정확하게 나오지 않습니다. 정확한 데이터가 나오게 하려면 임계영역을 만들고 그 안에서 변수에 접근을 해야하는데요 이번 포스팅은 C#에서 임계영역을 만들어 여러 Thread(쓰레드)에서 접근할때 변수를 차례대로 사용하여 정확한 데이터를 사용하는 방법에 대해서 알아보겠습니다. C#에서 임계영역을 만들때 여러가지 방법이 있겠지만 개인적으로 가장 간단하다고 생각하는 방법은 Mutex 클래스를 이용하는 것입니다. 바로 사용법을 알아보겠습니다. Mutex mutex; // Mutex 객체 선언 mutex = new Mutex(); // Mutex 객체 생성 mutex.WaitOne(); // 임계영역 설.. 2020. 10. 6.
C# DLL 오류 DllNotFoundException BadImageFormatException 안녕하세요 마블랑입니다. C#이나 C++ 등 프로그래밍 언어로 개발을 할때 일일이 다 구현할수 있다면 다른 라이브러리를 사용할 필요가 없습니다. 하지만 그렇게 하기도 어려울뿐더러 개발 시간을 단축시켜 생산성을 높여야 하기때문에 라이브러리를 사용하는데요 윈도우에서는 DLL 을 주로 사용합니다. 잘 구현되어있는 DLL을 그대로 사용하여 개발을 한다면 굉장히 편한데요 그런데 DLL을 불러와서 사용하는 도중에도 오류가 발생할때가 있더군요 DLL내부에서 잘못된거면 해당 DLL을 다른방법으로 대체하면 되는데요 불러오는 도중에 에러가 발생했으니 해결방법을 찾아서 해결하면 되는문제입니다. 이번 포스팅은 DLL을 불러올때 가끔 발생하는 아주 기초적인 오류에 대한 해결방안입니다. 보통 DLL을 불러올때 발생하는 에러로 D.. 2020. 9. 29.