Oracle ODP.NET是否有处理查询中百分比符号的错误?

时间:2016-09-02 19:34:18

标签: c# oracle odp.net

我使用带有oracle ODP.NET的C#查询表,如果字段值的符号为"%"它似乎有一种奇怪的行为。如下例所示:

在Oracle(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中使用的简单Windows窗体应用程序(使用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。在oracle提供者中似乎是一个糟糕的解释。

如果您使用System.Data.OleDb,则不会出现此问题,但在处理Clob类型时我无法使用它。

有人知道这个问题的解决方案吗?

Thansk all!

1 个答案:

答案 0 :(得分:1)

从代码中删除dr.Read()解决了问题!

感谢@tbone的帮助。