본문 바로가기

Programming/.NET

[ASP.NET] SqlParameter

데이터 베이스관련 프로그래밍 작업시 SQL 구문에서 Parameter 사용은 반드시 사용되어야 하는 필수사항은 아니지만 SQL injection 공격을 방어하는데 충분한 도움을 줄 수 있으므로 귀찮더라도 되도록 SqlParamter 사용을 권장합니다 . 실제작업시 SqlParamter 클래스의 인스턴스로서 생성되는 Parameter 는 이름, 값, 데이터형등의 필수정보 속성을 설정함으로서 사용됩니다.

 ParameterName  Parameter 이름을 설정하거나 설정된 값을 가져옵니다.
 SqlDbType  Paramter 값에 해당하는 SQL 데이터베이스의 데이터형을 설정하거나 설정된 값을 가져옵니다.
 Size  Paramter 값의 크기를 설정하거나 설정된 값을 가져옵니다.
 Direction  Input 혹은 Output 등의 Direction 을 설정하거나 설정된 값을 가져옵니다.
 Value  Paramter 에서 처리될 실제 값을 설정하거나 설정된 값을 가져옵니다.

아래는 SqlParamter 이용시 예제코드입니다.
SqlConnection MyConnection = new SqlConnection();
 
MyConnection.ConnectionString = ConfigurationManager.ConnectionStrings["new_connection"].ConnectionString;
            
SqlCommand MyCommand = new SqlCommand();
MyCommand.CommandText = "Select Top 100 * From [Person].[PersonPhone] Where PhoneNumber = @pn";
MyCommand.CommandType = CommandType.Text;
MyCommand.Connection = MyConnection;
 
SqlParameter sp = new SqlParameter();
sp.ParameterName = "@pn";
sp.SqlDbType = SqlDbType.NVarChar;
sp.Size = 25;
sp.Direction = ParameterDirection.Input;
sp.Value = "849-555-0139";
 
MyCommand.Parameters.Add(sp);
 
SqlDataAdapter MyAdapter = new SqlDataAdapter();
MyAdapter.SelectCommand = MyCommand;
            
DataTable MyTable = new DataTable();
MyAdapter.Fill(MyTable);
GridView.DataSource = MyTable.DefaultView;
GridView.DataBind();
 
MyCommand.Connection.Open();
 
MyAdapter.Dispose();
MyCommand.Dispose();
MyConnection.Dispose();
쿼리구문을 설정하는 MyCommand 객체의 CommandText 속성에서 우선 Paramter 로 사용할 조건절을 작성하고 해당 Paramter의 이름을 SqlParamter 클래스 객체의 ParamterName 속성으로 설정합니다. 그리고 다른 설정사항인 SqlDbType 이나 Size 등의 정보도 같이 지정하도록 합니다.

Paramter 의 모든 속성 설정이 완료되면 SqlCommand 객체의 Parameters.Add 메소드로 위에서 설정한 Paramter 인스턴스를 전달해 Paramter 를 추가하면 Paramter 에 관한 모든 작업이 완료됩니다. 만약 2개 이상의 Paramter 설정이 필요하다면 필요한 만큼의 SqlParamter 클래스 객체를 선언해야 합니다.

만약 같은 SQL 쿼리에서 Paramter 를 사용하지 않는다고 한다면
MyCommand.CommandText = "Select Top 100 * From [Person].[PersonPhone] Where PhoneNumber = '849-555-0139'";
처럼 값을 바로 지정하거나 변수를 대입해 사용할 수 있습니다.

'Programming > .NET' 카테고리의 다른 글

[ASP.NET] WaitHandle  (0) 2014.10.02
[ASP.NET] SqlCommand  (0) 2014.09.20
[ASP.NET] SqlParameter  (0) 2014.09.05
[ASP.NET] ADO.NET 의 네임스페이스와 클래스  (0) 2014.09.01
[ASP.NET] LinkButton  (0) 2014.08.27
[ASP.NET] DataReader  (0) 2014.08.22