ADO.NET_06_OracleCommand

19265 단어 command
본문 내용
  • Execute NonQuery 방법
  • Execute Scalar 방법
  • ExecuteReader 방법
  • PL SQL 실행
  • 저장 프로 세 스 실행
  •  
    표 구조
    create table AB
    (
      A VARCHAR2(10),
      B VARCHAR2(10),
      C BLOB,
      D CLOB
    )

    저장 프로시저
    create or replace procedure p_add(v_a in varchar2, v_b in varchar2 ) is
    begin
        INSERT INTO AB (a, b) VALUES (v_a, v_b);
    end p_add;

    Execute NonQuery 방법
    SQL 실행
    Oracle ecommand. Execute NonQuery 방법 은 디 렉 터 리 작업 (예 를 들 어 데이터베이스 구 조 를 조회 하거나 데이터베이스 대상 을 만 드 는 것) 을 수행 하거나 UPDATE, INSERT, DELETE 와 같은 DML 작업 을 수행 하 는 데 사 용 됩 니 다.
    string connStr = "Data Source=ora11; uid=scott; pwd=tiger; unicode=true";
    string aVar = "AAA";
    string bVar = "AAA";
    string dVar = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
    string sqlStr = "INSERT INTO AB(A,B,D) VALUES(':aVar',':bVar',':dVar')";
    sqlStr = sqlStr.Replace(":aVar", aVar).Replace(":bVar", bVar).Replace(":dVar", dVar);
     
    OracleConnection conn = new OracleConnection(connStr);
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = sqlStr;
    cmd.CommandType = CommandType.Text;
     
    try
    {
        conn.Open();
        cmd.ExecuteNonQuery();
        Response.Write("  .");
        //int rowAffected = cmd.ExecuteNonQuery();
        //Response.Write("     :" + rowAffected);
    }
    catch (Exception ex)
    {
        Response.Write("  ." + ex);
    }
    finally
    {
        conn.Close();
        conn.Dispose();
        cmd.Dispose();
    }

    설명 하 다.
    1) Oraclecommand. Execute NonQuery 방법 은 UPDATE, INSERT, DELETE 문장 에 대해 이 명령 에 영향 을 주 는 줄 수 를 되 돌려 줍 니 다.다른 유형의 문장 에 대해 반환 값 은 - 1 이다.스크롤 백 이 발생 하면 반환 값 은 - 1 입 니 다.
    2) 이 예 는 SQL 문 구 를 직접 만 들 고 Oracle Parameter 로 매개 변 수 를 가 진 SQL 을 실행 할 수 있 습 니 다.
    매개 변수 가 있 는 SQL 실행
    string connStr = "Data Source=ora11; uid=scott; pwd=tiger; unicode=true";
    string insertSql = "INSERT INTO AB(A,B) VALUES(:aVar,:bVar)";
    OracleConnection conn = new OracleConnection(connStr);
    conn.Open();
    OracleCommand cmd = new OracleCommand(insertSql, conn);
    OracleParameter[] paras = {
    new OracleParameter("aVar", OracleType.NVarChar, 10),
    new OracleParameter("bVar", OracleType.NVarChar, 10)};
    paras[0].Value = "AAA";
    paras[1].Value = "AAA";
    foreach (OracleParameter para in paras)
        cmd.Parameters.Add(para);
    cmd.CommandType = CommandType.Text;
     
    try
    {
        cmd.ExecuteNonQuery();
        Response.Write("  .");
        //int rowAffected = cmd.ExecuteNonQuery();
        //Response.Write("     :" + rowAffected);
    }
    catch
    {
        Response.Write("  .");
    }
    finally
    {
        conn.Close();
        conn.Dispose();
        cmd.Dispose();
    }

    설명 하 다.
    1) SQL 문 구 를 Oracle Parameter 로 유연 하 게 실행 하지만 실제 프로젝트 에 서 는 그렇지 않 고 SQL 문 구 를 직접 만 드 는 경우 가 많다.직접 SQL 문 구 를 구성 하 는 것 은 직관 적 이 고 디 버 깅 프로그램 에서 SQL 문 구 를 정확하게 검사 하기 쉽다.
    2) 그렇다면 오 라 클 매개 변 수 는 어떤 경우 에 사용 하나 요?데이터베이스 의 큰 필드 (예 를 들 어 Clob 와 Blob) 를 조작 할 때 Clob 필드 를 조작 할 때 SQL 문 구 를 직접 구성 하면 문자열 길이 제한 이 있 을 수 있 습 니 다.이 점 은 Oracle 9i 에 서 는 뚜렷 하지만 Oracle 11g 에 서 는 거의 알 아 볼 수 없다.안전 을 위해 서 나 는 보통 오 라 클 파 라 메 터 를 사용한다.
    3) Oracle Parameter 는 7 개의 구조 함수 가 있 습 니 다. MSDN 에 가서 보 세 요. 자신 이 가장 좋아 하 는 방법 을 찾 으 면 됩 니 다.
     
    ExecuteScalar 방법
    string connStr = "Data Source=ora11; uid=scott; pwd=tiger; unicode=true";
    string sqlStr = "SELECT COUNT(*) FROM EMP";
    OracleConnection conn = new OracleConnection(connStr);
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = sqlStr;
    cmd.CommandType = CommandType.Text;
     
    try
    {
        conn.Open();
        Int32 count = Convert.ToInt32(cmd.ExecuteScalar());
        Response.Write("  ." + count);
    }
    catch (Exception ex)
    {
        Response.Write("  ." + ex);
    }
    finally
    {
        conn.Close();
        conn.Dispose();
        cmd.Dispose();
    }

    설명 하 다.
    (1) Oraclecomand. ExecuteScalar 방법 은 결과 의 데이터 세트 개 수 를 되 돌려 줍 니 다. 보통 사용자 로그 인 에 사 용 됩 니 다.(2) 또한 이 방법 은 조회 결과 가 집 중 된 첫 줄 의 첫 번 째 열 을 되 돌려 줍 니 다.이 예 를 들 어 SQL 을 'SELECT * FROM EMP WHERE EMPNO =' + '7369' + '로 바 꾸 고 오 라 클 데이터 어댑터 로 데이터 세트 를 채 워 출력 결 과 를 얻 을 수 있 습 니 다.
     
    ExecuteReader 방법
    string connStr = "Data Source=ora11; uid=scott; pwd=tiger; unicode=true";
    string sqlStr = "SELECT d FROM ab";
     
    OracleConnection conn = new OracleConnection(connStr);
    OracleCommand cmd = new OracleCommand();
    OracleDataReader dr = null;
    cmd.Connection = conn;
    cmd.CommandText = sqlStr;
    cmd.CommandType = CommandType.Text;
     
    try
    {
        conn.Open();
        dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            if (dr[0].ToString().Length > 0)
                Response.Write(dr[0].ToString() + "</br>");
        }
    }
    catch (Exception ex)
    {
        Response.Write("  ." + ex);
    }
    finally
    {
        conn.Close();
        conn.Dispose();
        cmd.Dispose();
    }

     
    여러 SQL 실행
    여러 개의 Oracle Command 실행
    ArrayList commands = new ArrayList();
    string connStr = "Data Source=ora11; uid=scott; pwd=tiger; unicode=true";
    string insertSql = "INSERT INTO AB(A,B) VALUES(:aVar,:bVar)";
     
    OracleConnection conn = new OracleConnection(connStr);
    conn.Open();
    OracleTransaction tran = conn.BeginTransaction();
    for (int i = 0; i <= 10; i++)
    {
        OracleCommand cmd = new OracleCommand(insertSql, conn);
        OracleParameter[] paras = {
    new OracleParameter("aVar", OracleType.NVarChar, 10),
    new OracleParameter("bVar", OracleType.NVarChar, 10)};
        paras[0].Value = "AAA" + i;
        paras[1].Value = "BBB" + i;
        foreach (OracleParameter para in paras)
            cmd.Parameters.Add(para);
        cmd.CommandType = CommandType.Text;
        commands.Add(cmd);
    }
     
    try
    {
        foreach (OracleCommand cmd in commands)
        {
            cmd.Connection = conn;
            cmd.Transaction = tran;
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();
        }
        tran.Commit();
        Response.Write("  .");
    }
    catch (Exception ex)
    {
        tran.Rollback();
        Response.Write("  ." + ex);
    }
    finally
    {
        foreach (OracleCommand cmd in commands)
        {
            cmd.Dispose();
        }
        tran.Dispose();
        conn.Dispose();
        conn.Close();
    }

    PL SQL 실행
    StringBuilder sqlSb = new StringBuilder();
    string connStr = "Data Source=ora11; uid=scott; pwd=tiger; unicode=true";
    OracleConnection conn = new OracleConnection(connStr);
     
    sqlSb.Append("BEGIN ");
    for (int i = 0; i <= 10; i++)
    {
        string aCol = "AAA" + i;
        string bCol = "BBB" + i;
        string insertSql = "INSERT INTO AB(A,B) VALUES('" + aCol + "','" + bCol + "'); ";
        sqlSb.Append(insertSql);
    }
    sqlSb.Append(" END;");
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = sqlSb.ToString();
    cmd.CommandType = CommandType.Text;
     
    try
    {
        conn.Open();
        cmd.ExecuteNonQuery();
        Response.Write("  .");
    }
    catch (Exception ex)
    {
        Response.Write("  ." + ex);
    }
    finally
    {
        conn.Close();
        conn.Dispose();
        cmd.Dispose();
    }

     
    실행 메모리 프로 세 스
    string connStr = "Data Source=ora11; uid=scott; pwd=tiger; unicode=true";
     
    OracleConnection conn = new OracleConnection(connStr);
     
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = "p_add";
    cmd.CommandType = CommandType.StoredProcedure;
    OracleParameter[] paras = {
    OracleParameter("v_a", OracleType.NVarChar, 10),
    OracleParameter("v_b", OracleType.NVarChar, 10)};
    paras[0].Value = "AAA";
    paras[1].Value = "AAA";
    foreach (OracleParameter para in paras)
        cmd.Parameters.Add(para);
     
    try
    {
        conn.Open();
        cmd.ExecuteNonQuery();
        Response.Write("  .");
    }
    catch (Exception ex)
    {
        Response.Write("  ." + ex);
    }
    finally
    {
        conn.Close();
        conn.Dispose();
        cmd.Dispose();
    }

     
    다운로드 데모

    좋은 웹페이지 즐겨찾기