본문 바로가기

   
Programming/ADO.NET

Parameters 2번째, SELECT, reader + command

반응형




using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data;

using System.Data.SqlClient;

 

namespace AdoConsole

{

           class Parametesr02

           {

                     static void Main(string[] args)

                     {

                                //매개변수가 있는 프로시저 호출

                                // - upTblAddresInsert2

                               

                                //1. 연결

                                SqlConnection con = new SqlConnection(Settings1.Default.ADONETConStr);

                                con.Open();

 

                                //2. 명령

                                SqlCommand cmd = new SqlCommand();

                                cmd.Connection = con;

                                cmd.CommandText = "upTblAddressInsert2";

                                cmd.CommandType = CommandType.StoredProcedure;

 

                                //3. 매개변수 구성 - 프로시저내의 매개변수와 연결을 하기 위해서...

                                cmd.Parameters.Add("@name", SqlDbType.NVarChar, 10);

                                cmd.Parameters.Add("@age", SqlDbType.Int);

                                cmd.Parameters.Add("@email", SqlDbType.NVarChar, 50);

                                cmd.Parameters.Add("@address", SqlDbType.NVarChar, 200);

                                cmd.Parameters.Add("@tel", SqlDbType.NVarChar, 15);

 

                                //SqlParameter 사용하는 이유 ?

                                // - 기본적인 예외처리를 알아서 해줌..

                                // - 대부분의 컨트롤과 마법사에서 SQL 대한 매개변수를 SqlParameter 취급

                                // Parametes 기본적인 예외처리를 알아서 처리해준다.

                                cmd.Parameters["@name"].Value = "하하하하하하하하하하하하하하하하하하하";

                                cmd.Parameters["@age"].Value = 20;

                                cmd.Parameters["@email"].Value = "hi.naver.com";

                                cmd.Parameters["@address"].Value = "부산서울''ㅇㅇㅇ";

                                cmd.Parameters["@tel"].Value = "012-345-6789";

 

                                cmd.ExecuteNonQuery();

 

                                con.Close();

                     }

           }

}





using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

using System.Data;

using System.Data.SqlClient;

 

namespace AdoConsole

{

       class Select

       {

             static void Main(string[] args)

             {

                    //연결 -> 질의 -> 결과셋(ResultSet) 처리 -> 종료

                    //반환값이 있는 질의

                    // - 단순, 서브쿼리, 조인, 함수, 유니온,

 

                    M1();

                    //M2();

                    //M3();

                    //M4();

                    //M5();

             }

 

             private static void M5()

             {

                    SqlConnection con = new SqlConnection(Settings1.Default.ADONETConStr);

                    con.Open();

 

                    SqlCommand cmd = new SqlCommand();

                    cmd.Connection = con;

                    cmd.CommandText = "SELECT * FROM tblAddress";

 

                    SqlDataReader reader = cmd.ExecuteReader();

 

                    while (reader.Read())

                    {

                           //가독성이 떨어져서 첫번째 주석단 것을 대부분 사용한다.

 

                           //내부적으론 인티져 이지만 오브젝트로 형변환되서 값이 넘어온다.

                           //오브젝트형은 가장 상위 계층이기 때문에 하위 계층으로 형변환이 대부분 다된다.

                           //int age = (int)reader["age"];//object -> int

                           int age = reader.GetInt32(2);//index밖에 못쓰지만 자동으로 형변환 해준다. 위에 방법이나 아래방법으로 편한방법으로 사용 하도록 한다.

                           age -= 10;

 

                           //

                           //DateTime regDate = (DateTime)reader["regDate"]; //object -> DateTime

                           DateTime regDate = reader.GetDateTime(6);//6번째 컬럼값을 자동으로 형변환 해준다. 메소드자체 기능에 추가 되있음.

                           TimeSpan span = DateTime.Now - regDate;

 

                           Console.WriteLine("{0} - {1}세 이고 - {2}시간쨰" ,reader["name"].ToString(), age, regDate);

                    }

 

                    reader.Close();

                    con.Close();

             }

 

             private static void M4()

             {

                    //SqlDataReader 접근하는 레코드셋은 원본이 아니라 결과 셋이다~!

                    SqlConnection con = new SqlConnection(Settings1.Default.SQLExConStr);

                    con.Open();

 

                    SqlCommand cmd = new SqlCommand();

                    cmd.Connection = con;

                    //결과셋이기 때문에 질의한 쿼리문에서 결과 셋으로 나온 네임으로 출력을 해주어야 한다.

                    cmd.CommandText = "SELECT name, popu AS [인구수] FROM tblCountry";

 

                    SqlDataReader reader = cmd.ExecuteReader();

 

                    //반복문 반환값이 TRUE , FALSE 이기 때문에 while문이 가장 적합하다.

                    while (reader.Read())

                    {

                           //n번째 레코드를 커서가 위치..

                           Console.WriteLine("{0} - {1}", reader["name"].ToString(), reader["인구수"].ToString());

                    }

                    reader.Close();

                    con.Close();

 

             }

 

 

             private static void M3()

             {

                    SqlConnection con = new SqlConnection(Settings1.Default.SQLExConStr);

                    con.Open();

 

                    SqlCommand cmd = new SqlCommand();

                    cmd.Connection = con;

                    cmd.CommandText = "SELECT * FROM tblCountry";

 

                    SqlDataReader reader = cmd.ExecuteReader();

 

                    //반복문 반환값이 TRUE , FALSE 이기 때문에 while문이 가장 적합하다.

                    while (reader.Read())

                    {

                           //n번째 레코드를 커서가 위치..

                           Console.WriteLine("{0} - {1}", reader ["name"].ToString(), reader["capital"].ToString());

                    }

                    reader.Close();

                    con.Close();

             }

 

             private static void M2()

             {

                    SqlConnection con = new SqlConnection(Settings1.Default.SQLExConStr);

                    con.Open();

 

                    SqlCommand cmd = new SqlCommand();

                    cmd.Connection = con;

                    cmd.CommandText = "SELECT * FROM tblCountry";

 

                    //실행

                    SqlDataReader reader = cmd.ExecuteReader();

 

                    reader.Read();//true(데이터있다.), false(없다)

 

                    Console.WriteLine(reader["name"].ToString());

                    Console.WriteLine(reader["capital"].ToString());

 

                    reader.Read();

                    //마지막 구문까지 읽어 들였을때는 데이터가 없는데 name을 달라고 할경우 에러가 난다.

                    con.Close();

             }

 

             private static void M1()

             {

                    SqlConnection con = new SqlConnection(Settings1.Default.ADONETConStr);

                    con.Open();

 

                    SqlCommand cmd = new SqlCommand();

                    cmd.Connection = con;

                    cmd.CommandText = "SELECT * FROM tblAddress";

 

                    //SELECT 실행

                    //reader : 판독기

                    // - SQL에서 변환한 결과셋을 레코드 단위로 접근 후 원하는 컬럼의 값을 가져오는 역할

                    //MS SQL은 결과셋을 반환한다 C#한테 얻어진 결과셋을 reader가 관리한다.

                    //reader 객체 커서를 아래한칸으로 내린다. 순차적으로 커서를 내리면서 원하는 컬럼값을 찾아와야 한다.

                    SqlDataReader reader = cmd.ExecuteReader();

 

                    //커서를 결과셋의 첫번째 레코드로 이동하시오.

                    reader.Read();

 

                    //현재 커서가 위치한 레코드의 원하는 컬럼값을 읽기

                    Console.WriteLine(reader["name"].ToString());

                    Console.WriteLine(reader["age"].ToString());

                    Console.WriteLine(reader["email"].ToString());

                    Console.WriteLine(reader["address"].ToString());

                    Console.WriteLine(reader["tel"].ToString());

 

                    Console.WriteLine(reader[2].ToString());

 

                    reader.Read();

                    Console.WriteLine(reader["name"].ToString());

 

                    reader.Read();

                    Console.WriteLine(reader["name"].ToString());

                    reader.Read();

                    Console.WriteLine(reader["name"].ToString());

                    reader.Read();

                    Console.WriteLine(reader["name"].ToString());

                    reader.Read();

                    Console.WriteLine(reader["name"].ToString());

                    reader.Close();

                    con.Close();

             }

 

       }

}

 

 


 

 

반응형