2016-09-02 11 views
-1

oracle ODP.NETでC#を使用してテーブルを照会していますが、フィールド値に "%"という記号が含まれていると奇妙な動作をしているようです。私は、シンボル%Visual Studioで簡単なWindowsフォームアプリケーションで今すぐOracle ODP.NETには、問合せのパーセント記号を処理するバグがありますか?

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; 

に値を挿入するテストテーブルを作成するには、次のコマンドを実行しますオラクル(11グラムまたは12C)で

次の例のよう(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; 
     } 
    } 
} 

データグリッド内では5行しか表示されません。しかし、SQL Developerに直接アクセスして同じ問合せを使用すると、すべての行が戻されます。私はすでに管理対象と管理対象外のodp.netを試しました。これは、オラクルのプロバイダーにとっては悪い解釈であるようです。

System.Data.OleDbを使用している場合、この問題は発生しませんが、Clob型の処理には使用できません。

誰でもこの問題の解決策を知っていますか?

Thansk all!

+2

dr.Read();行を削除します。何が起こるのですか? – tbone

+0

こんにちは@tbone、簡単なテストを行ったとdr.Read()を削除すると問題を解決するようです。来週、コード全体をテストし、結果をお知らせします。 –

+0

ちょっと@tbone、あなたのコメントはコードを解決しました。 dr.Read()はうまくいきません!あなたの助けに感謝します。 –

答えて

1

コードからdr.Read()を削除すると問題が解決しました。

ご協力ありがとうございます。

関連する問題