라벨이 C#인 게시물 표시

[C#] 제가 주로 사용하는 오라클 DB 처리 클래스(소스)

  오라클(Oracle) DB 처리 클래스 제가 주로 사용하는 데이터베이스는 MSSQL, ORACLE 입니다. MSSQL 는 Delphi, C# 으로 프로그램을 만들면서 사용했었고. Oracle 는 최근에 자주 사용하게 된 데이터베이스 입니다. C#에서 ASP.NET, 윈도우 프로그램을 만들때 DB 접속이 필요하면 이 오라클 Helper 클래스를 사용합니다. using Oracle.DataAccess.Client; 이걸 소스에 추가해야합니다. ODAC 을 설치하면 되는데 오라클 클라이언트도 필요하죠. ------ 소스코드 public class DBHelper_ORACLE {   private OracleConnection mDBConn = null;   private OracleCommand mCmd = null;   private OracleTransaction mTrans = null;  // 트랜젝션      private String ErrMsg = null;   private string _connstr = string.Empty;      #region DB연결   public DBHelper_ORACLE(string __connstr)   {     this._connstr = __connstr;   }      public bool DBConn()   {     try     {       mDBConn = new OracleConnection(_connstr);       mDBConn.Open();     }     catch (Exception e)     {       ErrMsg = e...

사용하는 프로그래밍 언어

프로그래밍 언어 벌써 프로그래머로 취직을 해서 회사를 다닌 지 19년이 넘었습니다. 정말 오래 다녔네요. 벌써 나이가 40이 넘었네요!!! 그래서 지금까지 사용하는?? 사용해 봤던 프로그래밍 언어를 정리해 봅니다. 글을 시작하면서 간단히 생각해 봐도 참 많네요!!! C/C++ 고등학교 때 프로그래머가 되겠다며 C언어 책을 하나 사서 보기 시작합니다. 고등학교 들어가서 산 PC(펜티엄급)에 터보 C를 설치한 후 책을 따라 하는데 책을 샀을 때에는 엄청난 프로그래머가 될 줄 알고 열심히 봤는데 처음에는 엄청 어렵더군요.. 그래서 프로그래밍보다는 게임을 많이 합니다. 그때 좀 더 열심히 했으면 지금보다 나았을 텐데 ㅠ.ㅠ 대학교에 가서 C언어 과목을 수강하면서 제대로 배우기 시작합니다. 확실히 고등학교 때 본 C언어 책이 도움이 되네요. C언어 리포트는 다 제가 해주기 시작합니다. 프로그램을 짜둔 다기보다는 디버깅을 해주고 안 되는 부분 설명해 주고 점심을 참 많이 얻어먹었습니다. 일주일 동안 매일 얻어먹은 적도 있어요 ㅎㅎ Visual C++을 사용하면서 C++을 배우게 됩니다. 하지만 Delphi를 배우기 시작하면서 Delphi에 빠지게 되고 C/C++은 멀리하게 됩니다. 그리고 2005년에 PSP 자작 프로그램 개발할 때 사용해 보게 되는데 역시 C에 대한 관심이 별로 안 생기네요. 아마 C++을 계속했으면 C++Builder를 사용했을지도 모르겠네요… VisualBasic 대학 다니면서 동아리 활동을 시작합니다. 근데 나름 전산 동아리라고 학교 축제에 프로그램을 짜서 축제 기간 동안 전시합니다. Delphi에 빠져들면서 Delphi를 사용해서 프로그램을 짜고 전시회도 하고 싶었는데 팀 인원이 모자라서 VisualBasic를 사용하는 팀에 합류합니다. 거기서 합숙(?) 같은 걸 하면서 동영상 재생기도 만들어보고 앨범 프로그램도 만들게 되고 VisualBasic의 기초는 배우게 됩니다. 설마 나중에 회사에서 사용할 일이 있을 줄을 그땐 몰랐지요!!! Delphi...

[C#] SerialPort 사용하기

  SerialPort 를 사용할일이 생겼는데 C# 에서 간단히 처리 가능하네요. using System.IO.Ports; 을 참조 추가하면 SerialPort 클래스를 사용할수 있습니다. ---- 소스코드 private SerialPort ComPort = null; // ComPort 선언 ComPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); // ComPort 객제 생성 ComPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceived); // 데이터 받는 이벤트 연결 ComPort.Open(); // ComPort 오픈 // ComPort 데이터 받는 이벤트 void ComPort_DataReceived(object sender, SerialDataReceivedEventArgs e) {      ComPort.ReadExisting() // 데이터 받아오기 } // ComPort 로 값 쓰기 ComPort.Write('1'); // ComPort 객체 닫기 if (ComPort.IsOpen) {      ComPort.Close(); } ---- 소스코드 끝 SerialPort 클래스를 이용하면 ComPort 제어를 쉽게 할수 있다.

[C#] 기초 - 기본 개념

이미지
  C#으로 작성된 어플리케이션은 크게 클래스(Class), 네임스페이스(Namespace), 어셈블리(Assembly)와 같은 요소로 구성되어 있다.​ ​클래스(Class) ​​프로그램 내에서 독립적으로 조작할 수 있는 최소 단위. 멤버로 메소드(Method), 프로퍼티(Property), 이벤트(Event), 델리게이트(Delegate) 등을 가진다.​ ​네임스페이스(Namespace) ​​여러 개의 클래스들이 모인 논리적 그룹 단위.​​ 어셈블리(Assembly)​ ​클래스, 네임스페이스가 모여 생성된 물리적 파일. 갂단히 말하면 빌드 후 생성되는 DLL 혹은 EXE 파일이라고 생각하면 된다.​ ​ 이렇게 작성된 코드를 빌드하게 되면 MSIL(Microsoft Intermediate Language)이라고 하는 기계어 직전 단계의 언어로 구성된 어셈블리가 생성이 된다.​ ​ 바로 바이너리(Binary) 형식이 아닊 MSIL 형태로 생성을 하게 되는 이유는 자바와 마찬가지로 플랫폼에 종속적이 않고, 다양한 플랫폼에 이식 가능하도록 하기 위해서 이다.​ ​ Mono 프로젝트( http://www.mono-project.com/Main_Page ) 를 통해서 다양한 플랫폼에 적용 가능하다. 이렇게 MSIL 형태로 존재하는 어셈블리는 실행되는 시점에 Just-In-Time (JIT) 컴파일러(compiler)가 각 플랫폼에 맞는 코드로 컴파일 되며 실행이 된다. ​ ​이러한 런타임 환경에서 일어나는 다양한 일들은 닷넷 프레임워크에서 제공해 주며, 다음과 같은 구성 요소를 가지고 있다.​​ CLS(Common Language Specification) ​​닷넷 프레임워크는 다양한 언어로 개발이 가능하다. 하지만 문제는 각 언어별로 특별히 지원하는 스펙이 존재할 것이다. ​ ​모든 프로젝트다 특정 하나의 언어로만 생성된 어셈블리만 사용하면 상관이 없으나, 개발을 하게 되면 다양한 언어로 개발된 어셈블리를 참조하게 될 것이다. ​ ​만약 참조된 어셈블리에서 지...

[C#] 프로그래밍 팁 #1

윈도우 사운드 볼륨 조절 프로그램에서 윈도우의 사운드 볼륨값을 지정하는 방법을 소개합니다. 알람을 발생하면서 소리를 내야 하는데 자꾸 볼륨이 줄어들어서 소리가 작게 들려서 강제로 볼륨을 지정할때 사용합니다. using System.Media; // 맨위에 추가 [DllImport("winmm.dll")] public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume); public static void SetSoundVolume(int volume) { try { int newVolume = ((ushort.MaxValue / 10) * volume); uint newVolumeAllChannels = (((uint)newVolume & 0x0000ffff) | ((uint)newVolume << 16));         waveOutSetVolume(IntPtr.Zero, newVolumeAllChannels); } catch (Exception) { } } 사용법 SetSoundVolume(100); // 최고 SetSoundVolume(0); // 최소 ​ 중복실행 방지하기 C# 에서 프로그램 중복 실행 방지하기 Program.cs 에 다음과 같이 코딩합니다. using System.Threading; 추가해주시구요. Main 함수에 이렇게 추가해주시면 bool CreateNew; Mutex dup = new Mutex(true, "프로그램명", out CreateNew); if (CreateNew) {   // 프로그램 실행부분   Application.EnableVisualStyles();   Application.SetCompatibleTextRenderingDefault(false);   Application.Run(new Program());   ...

[C#] XML Data 웹페이지 Post 전송 소스

  XML Data 웹페이지 Post 전송 소스 간단하게 C# 을 사용하여 웹페이지 POST 형태로 XML 데이터를 전송하는 소스를 소개합니다. JSON 도 많이사용하지만 익숙해서 그런지 XML 을 더 자주사용하네요 ---- 소스코드 // 전송할 XML Data // 예시 입니다. 실제로 XML 데이터를 입력해야 합니다.  StringBuilder XmlString = new StringBuilder(); XmlString.Append(""); XmlString.Append("xml_data"); XmlString.Append("TEST1233455"); XmlString.Append(""); ---- 소스코드 끝 아래 코드가 실제 데이터를 전송하는 부분 XML을 사용해서 base64 인코딩 하였습니다. ---- 소스코드 // XML 데이터는 기본적으로 웹서비스에서 받지 않음으로  // base64 encode 로 XML 값을 인코딩하여 보냄 byte[] byteArray = Encoding.UTF8.GetBytes(XmlString.ToString()); string tmpString = Convert.ToBase64String(byteArray);   String postData = "Message=" + tmpString;   byte[] byteArray1 = Encoding.UTF8.GetBytes(postData); // 실제 전송하는 코드 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:7912/MessageRecv.aspx"); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; request....

[C#] 파일 목록 구하기 / 파일명 구하기

  C# 폴더 안에 파일 목록 구하는 함수입니다. FindFiles 함수 코딩 정보 ---- 소스코드 public static ArrayList FindFiles(string CurPath, string Pattern, bool IsIncludeSubDir) {   ArrayList DirAll = new ArrayList();   if (IsIncludeSubDir)   {     GetAllDirectories(CurPath, ref DirAll);   }   else   {     DirAll.Add(new DirectoryInfo(CurPath));   }   //파일의 목록   ArrayList aPathFiles = new ArrayList();   //앞에서 얻어온 모든 DirectoryInfo에 대한 루핑.   foreach (DirectoryInfo d in DirAll)   {     foreach (FileInfo fi in d.GetFiles())     {       aPathFiles.Add(fi.Name);     }    }   return aPathFiles; } /// <summary> /// 지정한 폴더와 하위폴더에 대한 DirectoryInfo 개체를 배열에 저장함. /// </summary> /// 루트 경로</param> /// 각 폴더에 대한 DirectoryInfo를 저장한 배열</param> private static void GetAllDirectories(string Path, ref ArrayList DirAll) {   DirectoryInfo di = new DirectoryInfo(Path); ...

[C#] 오라클 Blob 필드 쓰고 / 읽기

  오라클에서 4000자가 넘어가는 텍스트나 파일을 DB에넣을때 blob 필드를 사용하는데요. 최근에 필드에 4000자가 넘는 데이터를 입력할일이 생겨 C# 에서 blob 필드를 사용하는 코드를 작성하였습니다. 그때 작성한 코드를 공개합니다. blob 필드 쓰기 mdb_main.DBConn(); OracleCommand cmd = new OracleCommand('Insert into 테이블명(data) value(:BlobParameter)', mdb_main.mDBConn); cmd.CommandType = CommandType.Text; cmd.BindByName = true; cmd.CommandText = Query; // BLOB 파라미터작업 String tim = "대용량 텍스트"; byte[] bytes = System.Text.Encoding.Unicode.GetBytes(tim); System.Buffer.BlockCopy(tim.ToCharArray(), 0, bytes, 0, bytes.Length); OracleParameter blobParameter = cmd.Parameters.Add("BlobParameter", OracleDbType.Blob); blobParameter.Value = bytes; //Open connection and execute insert query.                 cmd.ExecuteNonQuery(); cmd.Dispose(); blob 필드 읽기 OracleCommand cmd = new OracleCommand(); cmd.Connection = mdb_main.mDBConn; cmd.CommandText = "BLOB 필드 SELECT 쿼리"; cmd.CommandType = CommandType.Text; OracleDataReader dr = cmd.ExecuteReader(); dr.Read...

[C#] log4net 사용법

  제가 C#으로 프로그램을 만들때 주로 사용하는 log 라이브러리인 log4net 의 사용법을 소개합니다. log4net은 유명한 자바 log 라이브러리인 log4j의 .NET 버전이죠 사용하기도 편하고 기능이 강력해서 잘 사용하고 있습니다. ​ ​무인으로 동작하는 프로그램을 개발하거나 사용자에게 에러메세지를 숨겨야 하는경우 log에 남겨 놓고 문제점을 확인할때 필수이죠. ​ ​사용법 우선 https://logging.apache.org/log4net/ 이곳에가서 다운로드 받아서 사용해도 되고 Nuget을 통해 설치한 후 사용할 수 있습니다. ​ ​기본설정 Program.cs 에 추가할 내용 //using 추가 using log4net.Config; //로그 설정파일 읽기 XmlConfigurator.Configure(new System.IO.FileInfo("log4net.xml")); log4net.xml 설정내용 저는 주로 파일로 log를 만들고 실행폴더에 /log 폴더에 yyyy-MM-dd-ERROR.log 파일명으로 날짜별로 log를 만듭니다. <log4net>     <appender name="Console" type="log4net.Appender.ConsoleAppender">         <layout type="log4net.Layout.PatternLayout">             <!-- Pattern to output the caller's file name and line number -->             <conversionpattern value="%d [%t] %-5p %c - %m%n"> </conversionpattern>         </...

[C#] ini 파일 다루기

이미지
  C# 에서 ini 파일을 읽고 저장하는 방법을 소개합니다.         // 기본 선언해야될 내용          [DllImport("kernel32.dll")]         private static extern int GetPrivateProfileString(    // GetIniValue 를 위해             String section,             String key,             String def,             StringBuilder retVal,             int size,             String filePath);         [DllImport("kernel32.dll")]         private static extern long WritePrivateProfileString(  // SetIniValue를 위해             String section,             String key,             String val,             String filePath);    ...

[C#] 엑셀 시트명 읽어 오기 / Excel 파일내용 읽어오기

엑셀 시트명 읽어오기 엑셀 파일을 C#에서 다루는 방법을 간단히 알아봅시다. 우선 참조에 Microsoft.Office.Interop.Excel; 을 추가하고 코드 상단에 using Excel = Microsoft.Office.Interop.Excel; 를 추가 합니다. 엑셀을 읽기 위해서 필요합니다. Excel.Application xlApp; // 엑셀 오브젝트를 선언하고 Excel.Worksheet  xlSheet; // 엑셀 시트 변수를 선언합니다. xlApp = new Excel.ApplicationClass(); // 엑셀  오브젝트를 생성합니다. xlApp.Visible = false; // 화면에서 안보이기 xlApp.DisplayAlerts =  false; // 에러메세지 안보이기 xlApp.Workbooks.Open(openFileDialog1.FileName, 0, false,  5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);  //엑셀 파일 열기 옵션은 MSDN을  참조해주세요.   for (row = 1; row <= xlApp.Sheets.Count;row++) {   // 루프를 돌면서  엑셀 시트를 바인딩합니다.   xlSheet = (Excel.Worksheet) xlApp.Sheets.get_Item(row);   cbo_SheetList.Items.Add(xlSheet.Name);   // 시트 명을 콤보박스에 집어  넣기< }   xlApp.Quit();  // 엑셀 오브젝트를 종료합니다. Excel 파일내용 읽어오기(DataSet 이용하는 방법) DataSet 를 이용하여 그리드에 Excel 파일 내용을 불러오는 방법입니다. string connString = str...

[C#] DES 암호화/복호화

C# 에서 문자열을 DES알고림즘을 이용하여 암호화 하거나 복호하 하는 소스를 소개합니다.  using System;  using System.Collections.Generic;  using System.Linq;  using System.Web;  using System.Security.Cryptography;  using System.IO;  /// <summary&>;  /// Summary description for Des  /// </summary&>;  public class Des  {      byte[] key = null;      protected Des()      {      }      public Des(byte[] desKey)      {          this.key = desKey;      }      public string Encrypt(string plain_text)      {          if (string.IsNullOrEmpty(plain_text))          {              throw new ArgumentException("The string which needs to be encrypted can not be null.");          }    ...

[C#] 인터넷 연결 체크 함수

  인터넷 연결 체크 함수 인터넷이 연결됐는지 간단하게 체크하는 코드 .NET 2.0 이상 포함된 함수 ​ GetIsNetworkAvailable if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) { return true; } else { return false; } PDA 에서 인터넷 연결체크를 위해 작성한 코드 입니다. WIFI 로 IP를 할당 받았는지 확인하는 팁입니다. 인터넷에서 본 팁을 적용했습니다. bool bRetVal; try { string sHostName = System.Net.Dns.GetHostName();   IPHostEntry ipheThisHost = System.Net.Dns.GetHostEntry(sHostName);   IPAddress ipThisAddr = ipheThisHost.AddressList[0];   string ip = ipThisAddr.ToString();   string localhost = IPAddress.Parse("127.0.0.1").ToString();   if (ip == localhost)   {     bRetVal = false;   }   else   {     bRetVal = true;   } } catch {   bRetVal = false; } return bRetVal; AP를 할당받았을때 IP가 세팅이 되면 인터넷이 연결된것으로 봅니다. 이코드의 문제점은 고정IP 할당된 PDA에서는 사용할수 없습니다.