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!
dr.Read();行を削除します。何が起こるのですか? – tbone
こんにちは@tbone、簡単なテストを行ったとdr.Read()を削除すると問題を解決するようです。来週、コード全体をテストし、結果をお知らせします。 –
ちょっと@tbone、あなたのコメントはコードを解決しました。 dr.Read()はうまくいきません!あなたの助けに感謝します。 –