기본 콘텐츠로 건너뛰기

2월, 2019의 게시물 표시

[C#] .NET Configuration file :: App.config

프로그램의 옵션들을 담아 두는 파일로서 아주 예전에는 .INI 파일을 사용하였었으며, 이후 윈도우즈가 관리하는 레지스트리 데이타베이스에 시스템 및 응용프로그램의 옵션들을 저장하였다. 레지스트리는 프로그램의 옵션을 저장하는 훌륭한 저장 장소이나, 모든 응용프로그램이 항상 레지스트리에 데이타를 쓰는 권한을 갖는 것은 아니였기 때문에 Permission 제약점이 있었다. .NET Framework에서는 프로그램의 행위를 결정짓는 옵션들을 저장하기 위해 .Config 파일을 사용한다. 데스크탑 응용프로그램 .EXE 에 대해서 Configuration 파일(구성파일)은 .EXE.Config이 되는데, 예를 들어, TEST.EXE의 구성 파일은 TEST.EXE.Config가 된다. Visual Studio에서 콘솔, 윈폼, 혹은 WPF 등의  데스크탑 프로젝트를 생성한 후 App.config 파일을 추가하고(아래 그림처럼 Application Configuration File 추가) 여기에 필요한 옵션들을 설정한 후 빌드하면 .EXE 파일에 대한 .EXE.Config 파일이 자동으로 생성 된다. 그리고 이렇게 추가한 App.config 파일의 내용을 소스코드에서 사용하기위해서는 "참조"에서 '참조 추가하기'를 통해 반드시 에셈블리의 "System.Configurarion"을 추가하고 사용 할 소스코드에 using 문으로 추가해 주어야 한다.  " using System.Configuration; " <예제> [App.config] <?xml version="1.0" encoding="utf-8"?> <configuration>   <startup>     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1&

[DB] 개발자가 알아야할 기본적인 쿼리 SELECT / INSERT / UPDATE / DELETE

DB관리자가 아니라면 관리에 관련된 지식보다는 DB의 자료를 활용하는 SQL(쿼리)문의 사용이 개발자에게는 더욱 중요하다. 가장 기본적인 뼈대만 정리해서 알아보자. 1. SELECT문 - 기본구조 1 2 3 4 5 6 [ WITH  < Sub Query >  ] SELECT  select_lsit [  FROM  table_source ] [  WHERE  search_condition ] [ GROUP  BY  group_by_expression ] [ HAVING search_condition ] [  ORDER   BY  order_expression [ ASC  |  DESC ] ] cs ----------- 1 2 3 SELECT  행_이름  FROM  테이블이름  WHERE  조건 cs ----------- [예제] 1 2 SELECT   *   FROM  employees; SELECT  department_id, department_name  FROM  departments; cs -- 데이터베이스 사용자(=스키마)조회 ( Oracle ) 1 SELECT   *   FROM  SYS.DBA_USERS; cs -- 테이블 중 "HR"이 소유한 테이블만 찾을떄 조건추가 -- SYS.DBA_TABLES == SYS.ALL_TABLES 1 SELECT   *   FROM  SYS.DBA_TABLES  WHERE  OWNER  =   'HR' ; cs ... 작성중 [ PLUS Alpha ++] >> MERGE  merge문을 이용하면 insert와 동시에 update까지 같이 기능하는 프로시져를 구현할 수 있다. 1 2 3 4 5 6 7 8 9

[C#] C# 대리자(delegate)의 발전

C# 1.0에서는 코드의 다른 위치에 정의된 메서드를 사용하여 명시적으로 초기화하는 방식으로 대리자의 인스턴스를 만들었습니다. C# 2.0에서는 대리자 호출에서 실행될 수 있는 이름 없는 인라인 문 블록을 작성하는 방법으로 무명 메서드의 개념을 소개했습니다. C# 3.0에서는 개념적으로 무명 메서드와 비슷하지만 더 간결하고 표현이 다양한 람다 식을 소개했습니다. 이러한 두 기능을 함께 익명 함수라고 합니다. 일반적으로 .NET Framework의 버전 3.5 이상을 대상으로 하는 애플리케이션은 람다 식을 사용해야 합니다. 다음 예제에서는 C# 1.0에서 C# 3.0까지 대리자 만들기의 발전을 보여 줍니다 class Test {     delegate void TestDelegate(string s);     static void M(string s)     {         Console.WriteLine(s);     }     static void Main(string[] args)     {         // Original delegate syntax required         // initialization with a named method.         TestDelegate testDelA = new TestDelegate(M);         // C# 2.0: A delegate can be initialized with         // inline code, called an "anonymous method." This         // method takes a string as an input parameter.         TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };         // C# 3.0. A delegate can be initialized with         //

[C#] 연산자 목록(Operators)

[C#] 간결한 식(expression)

[ 기본 간결식 ] member => expression; (example 1 : 메서드) using System; public class Person { public Person(string firstName, string lastName) { fname = firstName; lname = lastName; } private string fname; private string lname; public override string ToString() => $"{fname} {lname}".Trim(); public void DisplayName() => Console.WriteLine(ToString()); } class Example { static void Main() { Person p = new Person("Mandy", "Dejesus"); Console.WriteLine(p); p.DisplayName(); } } (example 2 : 생성자) public class Location {    private string locationName;    public Location(string name) => Name = name;    public string Name    {       get => locationName;       set => locationName = value;    } } (example 3 : 종료자) using System; public class Destroyer {    public override string ToString() => GetType().Name;    ~Destroyer() => Console.WriteLine($&qu

[C#] C# 프로그램의 일반적인 구조(A skeleton of a C# program)

// A skeleton of a C# program  using System; namespace YourNamespace {     class YourClass     {     }     struct YourStruct     {     }     interface IYourInterface      {     }     delegate int YourDelegate();     enum YourEnum      {     }     namespace YourNestedNamespace     {         struct YourStruct          {         }     }     class YourMainClass     {         static void Main(string[] args)          {             //Your program starts here...         }     } } By Microsoft.MSDN :: .NET Guide Docs

[C#][Network][Thread] C#에서 쓰레드를 이용한 에코서버의 기본구조

// Thread Netwotk Server Exam namespace threadNetworkExam {     public partial class Form1 : Form     {         // TCP 소켓통신 서버구현을 위해 TCP리스너 정의/초기화         private TcpListener tcpListner = null;                 public Form1()         {             InitializeComponent();         }         // Thread Method         // Client 접속시 스레드가 호출하여 작업할 메소드 정의         private void AcceptClient()         {             while (true)             {                 // Client 소켓통신을 위해 수신을 대기하는 TcpClient 생성                 // TcpListner를 통해 생성                 TcpClient tcpClient = tcpListner.AcceptTcpClient();                 if (tcpClient.Connected)                 {                     // 접속한 Client IP정보를 얻어서 리스트박스에 추가                     string str = ((IPEndPoint)tcpClient.Client.RemoteEndPoint).Address.ToString();                     listBox1.Items.Add(str);                 }                 EchoServer echoServer = new EchoServer(tcpClient);                 Thread th = n

[C#][DB][ADO.NET] SqlCommandBuilder <- SqlCommand의 자동화

public partial class Form1 : Form     {         string strConn = "server=.\\SQLEXPRESS;database=example;uid=sa;pwd=12345";         SqlConnection Conn;         SqlDataAdapter dataAdapter;         DataSet dataSet;         SqlCommandBuilder cmdBuilder;         public Form1()         {             InitializeComponent();         }              private void Form1_Load(object sender, EventArgs e)         {             Conn = new SqlConnection(strConn);             dataAdapter = new SqlDataAdapter("SELECT * FROM tblEx01", Conn);                        dataSet = new DataSet();             cmdBuilder = new SqlCommandBuilder(dataAdapter);             dataAdapter.Fill(dataSet, "tblEx01");             dataGridView1.DataSource = dataSet.Tables["tblEx01"];         }         // 입력         private void button1_Click(object sender, EventArgs e)         {                        DataRow NewRow = dataSet.Tables["tblEx01"].NewRo

[C#][DB][ADO.NET] SqlCommand

public partial class Form1 : Form     {         string strConn = "server=.\\SQLEXPRESS;database=example;uid=sa;pwd=12345";         SqlConnection Conn;         SqlDataAdapter dataAdapter;         DataSet dataSet;         public Form1()         {             InitializeComponent();         }         private void SqlCommandInit()         {             string strSelectSQL = "SELECT * FROM tblEx01";             dataAdapter.SelectCommand = new SqlCommand(strSelectSQL, Conn);                      string strInsertCommand = "INSERT INTO tblEx01 (name, age) VALUES (@name, @age)";             dataAdapter.InsertCommand = new SqlCommand(strInsertCommand, Conn);             dataAdapter.InsertCommand.Parameters.Add("@name", SqlDbType.NVarChar, 15, "name");             dataAdapter.InsertCommand.Parameters.Add("@age", SqlDbType.Int, 0, "age");             string strDeleteCommand = "DELETE FROM tblEx01 WHERE

Visual Studio 단축키

문자 검색/치환 Ctrl + F  -> 검색 Ctrl + H  -> 치환 자동 들여쓰기(indent) Ctrl + K, Ctrl + D  -> 파일전체 Ctrl + K, Ctrl + F  -> 선택영역 코드개요 확장/축소 Ctrl + M, Ctrl + L  -> 파일전체 확장/축소 Ctrl + M, Ctrl + M  -> 선택영역 확장/축소 주석처리 Ctrl + K, Ctrl + C  -> 선택영역 주석화 Ctrl + K, Ctrl + U  -> 선택영역 주석 취소 함수정의로 이동 F12 커서 위치 이력 기록 Ctrl + - (마이너스)  -> 직전 커서위치로 이동 Ctrl + Shift + - (마이너스)  -> 다음 커서위치로 이동