C#

C# SqlCommand 클래스 + ExecuteXmlReader

saltdoll 2017. 10. 3. 02:32
반응형

출처: http://www.csharpstudy.com/Data/SQL-command.aspx


C# SqlCommand 클래스 

SqlCommand 클래스는 SQL 서버에 어떤 명령을 내리기 위해 사용하는 클래스이다. 
SQL 테이블로부터 데이타를 가져오거나(SELECT)테이블 내용을 삽입(INSERT)갱신(UPDATE)삭제(DELETE)하기 위해 이 클래스를 사용할 수 있으며, 
저장 프로시져 (Stored Procedure)를 사용할 때도 SqlCommand 를 사용한다. 
아래 예제는 SELECT 문을 사용하여 SQL 서버의 [Finance] 테이블에서 데이타를 가져오는 
명령을 실행한 예이다.


예제

string strConn = "Data Source=.;Initial Catalog=pubs;Integrated Security=SSPI;";
string sql = "SELECT * FROM Finance";

using(SqlConnection conn = new SqlConnection(strConn))
{
   conn.Open();
   
   // TSQL문장과 Connection 객체를 지정   
   SqlCommand cmd = new SqlCommand(sql, conn);

   // 데이타는 서버에서 가져오도록 실행
   SqlDataReader rdr = cmd.ExecuteReader();
}




SqlCommand.ExecuteNonQuery 사용 

SqlCommand 클래스에서 SQL문과 Connection객체를 설정한 후 명령을 실행하는데,
 이 때 데이타를 리턴 받을 것인지 혹은 어떤 데이타를 리턴 받을 것인지에 따라 
다른 SqlCommand 메서드를 호출하게 된다. 
ExecuteNonQuery 메서드는 INSERT, UPDATE, DELETE 등의 DML 문장을 실행할 때 사용한다. 

예제

string strConn = "Data Source=.;Initial Catalog=pubs;Integrated Security=SSPI;";
using(SqlConnection conn = new SqlConnection(strConn))
{
   conn.Open();
   SqlCommand cmd = new SqlCommand();
   cmd.Connection = conn;
   cmd.CommandText = "INSERT Table1 VALUES(1, N'광화문')";
   cmd.ExecuteNonQuery();
}


SqlCommand.ExecuteScalar 사용 

경우에 따라 리턴되는 데이타가 단 하나 Single Value인 경우가 있다. 이런 경우는 ExecuteScalar 메서드를 사용하면 간편하다. 리턴 값은 항상 object 타입으로 리턴되는데,
 이를 맥락에 맞는 데이타 타입으로 Casting하여 사용한다. 
아래 예는 테이블의 레코드수를 리턴받아 이를 int 타입으로 변환한 경우이다. 

예제

string strConn = "Data Source=.;Initial Catalog=pubs;Integrated Security=SSPI;";
int count = 0;
using(SqlConnection conn = new SqlConnection(strConn))
{
   conn.Open();
   SqlCommand cmd = new SqlCommand();
   cmd.Connection = conn;
   cmd.CommandText = "SELECT COUNT(*) FROM Table1";
   object scalarValue = cmd.ExecuteScalar();
   count = (int)scalarValue;
}
Console.WriteLine("레코드수 : {0}", count);




SqlCommand.ExecuteXmlReader 사용 

XML형태로 데이타를 리턴 받는 경우는 ExecuteXmlReader 메서드를 사용한다. 이 메서드는 XmlReader 객체를 리턴한다. 아래 예는 XML컬럼(XmlData)의 데이타를 리턴받아 
XmlReader를 사용해 XML 데이타를 사용하는 예이다. 

예제

using System.Data.SqlClient;
using System.Xml;
using System.Diagnostics;

namespace CSSQL
{
   class MySample
   {
      public void Sample1()
      {
         string strConn = "Data Source=(local);Initial Catalog=TestDB; Integrated Security=SSPI;";
         using (SqlConnection conn = new SqlConnection(strConn))
         {
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;            
            cmd.CommandText = "SELECT XmlData FROM TabX WHERE Id=1 FOR XML AUTO";
            
            // XML 데이타를 리턴받아 XmlReader객체에 넣는다.
            XmlReader xdr = cmd.ExecuteXmlReader();
            xdr.MoveToContent();            
            Debug.WriteLine(xdr.ReadInnerXml());
         }         
      }
   }
}


반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)