2016년 12월 29일 목요일

[닷넷교육,C#교육,실무교육학원추천_탑크리에듀][C#4.0 ADO.NET강좌]ADO.NET데이터조작, 명령객체, Command(OleDbCommand)클래스, 닷넷4.0, ADO.NET

[C#4.0 ADO.NET강좌]ADO.NET데이터조작, 명령객체, Command(OleDbCommand)클래스, 닷넷4.0, ADO.NET

Command (IDbCommand) 클래스
 
Command 클래스는 간단히 SQL 구문이나, 저장 프로시저(stored procedure)를 담는 것이라고 할 수 있으며, 연결이 되어 있는 데이터베이스 혹은 연결되지 않은 데이터베이스에서 모두 이용 될 수 있습니다. 각 데이터 제공자(Data Provider)의 Command Class들, 즉, OleDbCommand, SqlCommand등은 System.Data 이름 공간(Name Space)에 있는 IDbCommand를 구현 한 것입니다.
 
OleDbCommand public sealed class OleDbCommand : Component, ICloneable, IDbCommand
SqlCommand public sealed class SqlCommand : Component, IDbCommand, ICloneable
IDbCommand public interface IDbCommand
 
데이터 소스에 연결된 동안 실행되고 관계형 데이터베이스에 액세스하는 .NET Framework 데이터 공급자에 의해 구현되는 SQL 문을 나타냅니다.
 
OleDbCommand, SqlCommand와 같은 Command 클래스는 커넥션 클래스에서 지정된, 특정한 데이터 소스(Data Source)를 대상으로 원하는 명령어를 SQL문, 혹은 저장 프로시져(Stored Procedure)형태의 인자(Argument)를 받아 명령을 실행하는 역할을 합니다.
 
가장 널리 쓰이는 데이터 프로바이더 Sql, OLE용 Command (OleDbCommand와 SqlCommand)들 간의 차이는 거의 없지만, SqlCommand의 경우 OleDbCommand 클래스에서는 불가능한, XML 스트림(Stream)을 반환(return) 할 수 있다는 중요한 차이점이 있습니다.
 
1. OleDbCommand 클래스
 
OleDbCommand 클래스는 일반적으로 3 종류의 인자를 취해 인스턴스(Instance)를 생성 합니다.

[OleCommand Class Constructor]
 
public OleDbCommand() :  OleDbCommand 클래스의 새 인스턴스를 초기화합니다.
 
public OleDbCommand(string cmdString) : 쿼리 텍스트를 사용하여 OleDbCommand 클래스의 새 인스턴스를 초기화합니다.
 
public OleDbCommand(string cmdString) : 쿼리 텍스트와 OleDbConnection을 사용하여 OleDbCommand 클래스의 새 인스턴스를 초기화합니다.
 
public OleDbCommand(string cmdString, OleDbConnection cn, OleDbTransaction transaction) : 쿼리 텍스트, OleDbConnection 및 Transaction을 사용하여OleDbCommand 클래스의 새 인스턴스를 초기화합니다.
 
[OleDbCommand Public Properties]

CommandText : SQL 문이나 데이터 소스에서 실행할 저장 프로시저를 가져오거나 설정합니다. 

   OleDbCommand command = new OleDbCommand();
   command.CommandText = "SELECT * FROM Emp";
   command.CommandTimeout = 20;
 
CommandTimeout : 명령 실행을 종료하고 오류를 생성하기 전에 대기 시간을 가져오거나 설정합니다. 기본값은30 sec.
 
CommandType : CommandText 속성을 해석하는 방법을 나타내는 값을 가져오거나 설정합니다. 기본값 : Text 
 
   OleDbCommand cmd=OleDbCommand("SP");
   cmd.CommandType=
   CommandType.StoredProcedure;
 
public enum CommandType

Text, StoredProcedure, TableDirect 새개의 값

Connection : OleDbCommand 의 이 인스턴스에서 사용되는 OleDbConnection을 가져오거나 설정합니다. 
 
string queryString = "SELECT * FROM Emp";
   OleDbCommand command = new OleDbCommand(queryString);
   command.Connection = new OleDbConnection
      ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND_RW.MDB");
   command.CommandTimeout = 20;
DesignTimeVisible Customized Windows Forms Designer에서 보여져야 하는지를 지정
Parameters SQL문이나 저장 프로시져문에서 매개변수(Parameter) 지정. OleDbParameterCollection 을 가져옵니다. OleDbCommand command = new OleDbCommand(queryString, connection);
    command.CommandText = 
        "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
    command.Parameters.Add(parameters);
Transaction OleDbCommand 가 실행되는 OleDbTransaction을 가져오거나 설정합니다. OleDbCommand command = new OleDbCommand(queryString, connection);
    command.CommandText = 
        "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
    command.Parameters.Add(parameters);
OleDbTransaction tran=connection.BeginTransaction();
command.Transaction=tran;

UpdateRowSource : OleDbDataAdapter 의 Update 메서드에 의해 사용될 때 명령 결과가 DataRow에 적용되는 방법을 가져오거나 설정합니다. 
 
public enum UpdateRowSource

None : 반환된 매개 변수와 행이 무시됩니다.
OutputParameters : 출력 매개 변수는 DataSet의 변경된 행에 매핑됩니다.
FirstReturnedRecord : 처음 반환된 행의 데이터는 DataSet의 변경된 행에 매핑됩니다.
Both : 출력 매개 변수와 처음 반환된 행은 모두 DataSet의 변경된 행에 매핑됩니다.

[OleDbCommand Public Methods]

Cancel : OleDbCommand의 수행 취소를 시도. 
 
public void CreateCommand(string queryString, OleDbConnection connection)
{
    OleDbCommand command = new OleDbCommand(queryString, connection);
    command.Connection.Open();
    command.ExecuteReader();
    command.Cancel();
}

Clone : 현재 인스턴스의 복사본인 새 OleDbCommand 개체를 만듭니다.
 
CreateParameter : OleDbParameter 개체의 새 인스턴스를 만듭니다. 
 
public void CreateCommand(string queryString, OleDbConnection connection)
{
    OleDbCommand command = new OleDbCommand(queryString, connection);
    command.Connection.Open();
OleDbParameter param= 
command.CreateParameter();
}
ExecuteNonQuery Connection 에 대해 SQL 문을 실행하고 영향 받는 행의 수를 반환합니다. static private void CreateOleDbCommand(
    string queryString, string connectionString)
{
    using (OleDbConnection connection = new 
               OleDbConnection(connectionString))
    {
        connection.Open();
        OleDbCommand command = new 
            OleDbCommand(queryString, connection);
        command.ExecuteNonQuery();
    }
}

ExecuteReader : CommandText 를 Connection에 보내고 OleDbDataReader를 빌드합니다. 
 
OleDbCommand cmd=new OleDbCommand();
public void CreateReader(string connectionString, string queryString)
{
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        OleDbCommand command = new OleDbCommand(queryString, connection);
        connection.Open();
        OleDbDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            Console.WriteLine(reader[0].ToString());
        }
        reader.Close();
    }
}

OleDbConnection 을 닫기 전에 OleDbDataReader 개체를 먼저 닫습니다. OleDbCommand 개체를 다시 사용할 계획인 경우 OleDbDataReader 개체도 닫아야 합니다.
 
ExecuteReader(CommandBehavior) : CommandText 를 Connection에 보내고 CommandBehavior 값 중 하나를 사용하여 OleDbDataReader를 빌드합니다. 
 
public void CreateMyOleDbDataReader(string queryString,string connectionString) 
{
   OleDbConnection connection = new OleDbConnection(connectionString);
   OleDbCommand command = new OleDbCommand(queryString, connection);
   connection.Open();
   OleDbDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
   while(reader.Read()) 
   {
      Console.WriteLine(reader.GetString(0));
   }
   reader.Close();
   //Implicitly closes the connection because CommandBehavior.CloseConnection was specified.
}
 
public enum CommandBehavior

Default : 쿼리는 여러 결과 집합을 반환할 수 있습니다. 쿼리를 실행하면 데이터베이스 상태에 영향을 미칠 수 있습니다. Default 는 CommandBehavior 플래그를 설정하지 않으므로 ExecuteReader(CommandBehavior.Default) 호출과 ExecuteReader() 호출은 기능적으로 동일합니다.
SingleResult : 쿼리는 단일 결과 집합을 반환합니다.
SchemaOnly : 쿼리에서 열 정보만 반환합니다. SchemaOnly 를 사용할 때 .NET Framework Data Provider for SQL Server에서는 실행되는 문 앞에 SET FMTONLY ON을 배치합니다.
KeyInfo : 쿼리는 열과 기본 키 정보를 반환
SingleRow : 쿼리가 첫 번째 결과 집합의 단일 행을 반환
CloseConnection : 명령을 실행하면 관련 Connection 개체는 관련 DataReader 개체가 닫힐 때 함께 닫힙니다.
 
ExecuteScalar : 쿼리를 실행하고 쿼리에서 반환된 결과 집합에서 첫 번째 행의 첫 번째 열을 반환합니다. 추가 열이나 행은 무시됩니다. 
 
CommandText = "SELECT COUNT(*) FROM region";
Int32 count = (int32) ExecuteScalar();

Prepare : 데이터 소스에 명령의 준비 버전이나 컴파일 버전을 만듭니다. (CommandType 이 StoredProcedure 혹은 Text로서 세팅 되어야만 작동. 열려진 커넥션(Connection) 객체가 커맨드(Command) 객체에 할 당 되어 있지 않으면, InvalidOperationException에러 발생. 
 
private static void OleDbCommandPrepare(string connectionString)
{
    using (OleDbConnection connection = new
               OleDbConnection(connectionString))
    {
        connection.Open();
        // Create the Command.
        OleDbCommand command = new OleDbCommand();
        // Set the Connection, CommandText and Parameters.
        command.Connection = connection;
        command.CommandText =
            "INSERT INTO dbo.Region (RegionID, RegionDescription) VALUES (?, ?)";
        command.Parameters.Add("RegionID", OleDbType.Integer, 4);
        command.Parameters.Add("RegionDescription", OleDbType.VarWChar, 50);
        command.Parameters[0].Value = 20;
        command.Parameters[1].Value = "First Region";
        // Call  Prepare and ExecuteNonQuery.
        command.Prepare();
        command.ExecuteNonQuery();
        // Change parameter values and call ExecuteNonQuery.
        command.Parameters[0].Value = 21;
        command.Parameters[1].Value = "SecondRegion";
        command.ExecuteNonQuery();
    }
}
 
ResetCommandTimeout :  CommandTimeout 프로퍼티를 디폴트(Default)인 30 sec. 로 복원. 
 
OleDbCommand cmd=new OleDbCommand();
cmd.CommandTimeout=90;

cmd.ResetCommandTimeout();

댓글 없음:

댓글 쓰기