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();
}
}
}