쿼리 식은 from 절로 시작해야 한다. 또한 쿼리 식은 from 절로 시작하는 하위 쿼리를 포함할 수 있다.

 

from절에 들어갈 내용

  • 쿼리 또는 하위 쿼리가 실행될 데이터 소스
  • 소스 시퀀스의 각 요소를 나타내는 지역 범위 변수
  • from절에서 참조되는 데이터 소스는 IEnumerable, IEnumerable<T> 형식이거나 IQueryable<T>와 같은 파생 형식이어야 한다.
class LowNums
{
	static void Main()
    {
    	int[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0};
        
        var lowNums = from num in numbers
        	where num < 5
            select num;
            
        foreach (int i in lowNums)
        {
        	Console.Write(i + " ");
        }
    }
}
// Output : 4 1 3 2 0 

 

 

[출처] docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/from-clause

 

foreach문은 배열을 순회하면서 각각의 데이터 요소들에 순서대로 접근할 수 있도록 해주는 역할을 한다.

 

문법

foreach (데이터형식 변수명 in 배열) { }

int[] arr = {1, 2, 3, 4, 5, 6};
foreach (int num in arr)
{
	Console.WriteLine(num);
}

 

데이터 형식에는 var도 들어갈 수 있다.

  • var키워드는 암시적 타입 지역 변수를 의미하는데 초기화 문의 오른쪽에 있는 식에서 변수의 형식을 유추하도록 컴파일러에게 지시를 함으로써 명시적 형식을 제공하지 않고 지역 변수를 선언할 수 있다.
  • foreach 초기화문 , for 초기화문, using문에서 사용 가능하다. 
int[] arr = {1, 2, 3, 4, 5, 6};
foreach (var num in arr)
{
	Console.WriteLine(num);
}

 

 

C#에서 Oracle을 엑세스하기 위해서는 .NET에서 제공하는 System.Data.OracleClient.dll를 참조에 추가해야 한다.

우선, Oracle의 데이터를 사용하기 위해서는 Oracle의 데이터베이스에 연결을 해야한다.

 

OracleConnection 클래스

데이터베이스에 대한 열린 연결을 나타낸다. 이 클래스는 상속될 수 없다.

OracleConnection 개체는 범위에서 벗어나도 열려 있는 상태로 유지된다.

즉, 항상 Close 또는 Dispose를 호출하거나 Using문 내에서 OracleConnection 개체를 사용하여 닫아줘야 한다.

 

OracleCommand 클래스

데이터베이스에서 실행한 SQL문 또는 저장 프로시저를 나타낸다. 이 클래스는 상속될 수 없다.

 

항목 설명
ExecuteReader 행을 반환하는 명령을 실행한다.
ExecuteOracleNonQuery Connection에 대해 SQL문을 실행하고 영향 받는 행의 수를 반환한다.
ExecuteNonQuery SQL INSERT, DELETE, UPDATE 및 SET 문과 같은 명령을 실행한다.
ExrcuteScalar 데이터베이스에서 집계 값과 같은 단일 값을 .NET Framework 데이터 형식으로 검색한다.
ExecuteOracleScalar 데이터베이스에서 집계 값과 같은 단일 값을 Oracle 고유 데이터 형식으로 검색한다.

 

1) ExecuteReader를 이용한 데이터베이스의 데이터 읽기 예제

public void ReadData(string connectionString)
{
    string queryString = "SELECT EEMPNO, DEPTNO FROM TABLE";
    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        OracleCommand command = new OracleCommand(queryString, connection);
        connection.Open();
        OracleDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                Console.WriteLine(reader.GetInt32(0) + ',' + reader.GetInt32(1));
            }
        }
        finally {
            reader.Close();
        }
    }
}

 

2) ExecuteNonQuery를 이용한 쿼리 명령문 실행 예제

public void InsertRow(string connectionString)
{
    string queryString = "INSERT INTO DEPT(DEPTNO, DNAME,LOC) VALUES (50, 'THCHNOLOGY', 'DENVER')";
    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        OracleCommand command = new OracleCommand(queryString);
        command.Connection = connection;
        try
        {
            connection.Open();
            command.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

 

#region을 사용하면 코드 편집기의 개요 기능을 사용할 때 확장하거나 축소할 수 있는 코드 블록을 지정할 수 있다.

 

설명

#region 블록은 #endregion 지시문으로 종료해야 한다.

#region 블록은 #if 블록과 겹칠 수 없다. 그러나  #region 블록을 #if 블록에 중첩할 수 있고 #if 블록을 #region 블록에 중첩할 수 있습니다.

 

 

 

[출처] docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-region

+ Recent posts