2016-09-02 10 views
-1

oracle ODP.NET에서 C#을 사용하여 테이블을 쿼리했습니다. 필드 값에 "%"기호가 있으면 이상한 동작이있는 것 같습니다. 다음과 같은 예를 들어 :Oracle ODP.NET에는 쿼리에서 백분율 기호를 다루는 버그가 있습니까?

오라클 (11g 또는 12C) 나는 간단한 창에

CREATE TABLE "TESTCHAR" ("NAME" VARCHAR2(255 BYTE) NOT NULL ENABLE, "RESULT" VARCHAR2(4000 BYTE)); 
COMMIT; 

INSERT INTO TESTCHAR (NAME, RESULT) VALUES ('Test 1 % Area','10'); 
INSERT INTO TESTCHAR (NAME, RESULT) VALUES ('Test 2 % Area','10'); 
INSERT INTO TESTCHAR (NAME, RESULT) VALUES ('Test 3 % Area','10'); 
INSERT INTO TESTCHAR (NAME, RESULT) VALUES ('Test 4 % Area','10'); 
INSERT INTO TESTCHAR (NAME, RESULT) VALUES ('Test 5 % Area','10'); 
INSERT INTO TESTCHAR (NAME, RESULT) VALUES ('Test 6 % Area','10'); 
COMMIT; 

이제 기호 %에 값을 삽입하는 테스트 테이블을 만들려면 다음 명령을 실행 Visual Studio에서 응용 프로그램을 형태로 (2012 년과 2015 년 사용) 다음 앱을 만들었습니다 :

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Oracle.ManagedDataAccess.Client; 
using Oracle.ManagedDataAccess.Types; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      OracleConnection conn = new OracleConnection("User Id=myUser;Password=myPass;Data Source=myData"); 
      conn.Open(); 
      OracleCommand cmd = new OracleCommand(); 
      cmd.Connection = conn; 
      cmd.CommandText = "select * from testchar"; 
      cmd.CommandType = CommandType.Text; 
      OracleDataReader dr = cmd.ExecuteReader(); 
      dr.Read(); 
      DataTable dt = new DataTable(); 
      dt.Load(dr); 
      dataGridView1.DataSource = dt; 
     } 
    } 
} 

DataGrid에서는 단지 5 개의 행만 표시됩니다. 그러나 SQL Developer로 직접 이동하여 동일한 쿼리를 사용하면 모든 행이 반환됩니다. 나는 이미 관리되고 관리되지 않는 odp.net을 시도했다. 그것은 오라클 공급자의 나쁜 해석 인 것 같습니다.

System.Data.OleDb를 사용하는 경우이 문제는 발생하지 않지만 Clob 형식을 처리 할 때 사용할 수 없습니다.

아무도이 문제에 대한 해결책을 알고 있습니까?

Thansk 모두!

+2

다음 줄을 제거하십시오. dr.Read(); 무슨 일이야? – tbone

+0

안녕하세요 @ tbone, 빠른 테스트를했는데 dr.Read() 제거 문제가 해결 될 것 같습니다. 다음 주 전체 코드를 테스트하고 결과를 알려 드리겠습니다 !!! –

+0

Hey @tbone, 귀하의 의견은이 코드를 해결했습니다. dr.Read()가 제대로 작동하지 않으면! 도와 주셔서 정말로 고맙습니다. –

답변

1

코드에서 dr.Read()를 제거하면 문제가 해결되었습니다!

도와 주셔서 감사합니다.