Oracle.DataAccess 驱动使用因为SQL语句缓存报错问题解决办法
2017-02-16 09:09
585 查看
看一个简单的例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Oracle.ManagedDataAccess.Client;
public partial class ptest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
using (OracleConnection connection = new OracleConnection(Common.connstr))
{
connection.Open();
OracleCommand cmd = new OracleCommand("select * from v_tmp ", connection);
OracleDataAdapter sa = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
sa.Fill(dt);
cmd.Parameters.Clear();
Response.Write(dt.Rows.Count.ToString());
}
}
}
v_tmp 视图脚本如下
create or replace view v_tmp as
select 1 a,2 b from dual
不改变视图情况下,执行是正常的,单我们改变V_TMP视图结构的时候会报错,如:
create or replace view v_tmp as
select 1 a,2 b ,1 c from dual
create or replace view v_tmp as
select sysdate a,2 b from dual
这个问题主要是因为Oracle.DataAccess 为了提高性能,增加了SQL语句的高速缓存,如果后台表是动态的,可以去掉这个功能,在数据库连接里增加 Metadata Pooling=false 配置就可以了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Oracle.ManagedDataAccess.Client;
public partial class ptest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
using (OracleConnection connection = new OracleConnection(Common.connstr))
{
connection.Open();
OracleCommand cmd = new OracleCommand("select * from v_tmp ", connection);
OracleDataAdapter sa = new OracleDataAdapter(cmd);
DataTable dt = new DataTable();
sa.Fill(dt);
cmd.Parameters.Clear();
Response.Write(dt.Rows.Count.ToString());
}
}
}
v_tmp 视图脚本如下
create or replace view v_tmp as
select 1 a,2 b from dual
不改变视图情况下,执行是正常的,单我们改变V_TMP视图结构的时候会报错,如:
create or replace view v_tmp as
select 1 a,2 b ,1 c from dual
create or replace view v_tmp as
select sysdate a,2 b from dual
这个问题主要是因为Oracle.DataAccess 为了提高性能,增加了SQL语句的高速缓存,如果后台表是动态的,可以去掉这个功能,在数据库连接里增加 Metadata Pooling=false 配置就可以了。
相关文章推荐
- 关于数据库查询语句SqlDataReader的连接释放问题的解决办法
- 使用Hibernate 5.0、4.0、3.0 createSQLQuery执行原生Sql语句 遇到问题及解决办法集锦
- 关于执行Oracle下Sql语句中遇到的特殊字符问题解决办法。
- 【转】使用C#通过Oracle.DataAccess连接Oracle,部署时需要注意版本问题
- 使用linq to sql产生数据源,DataPager不起作用解决办法!
- "执行SQL语句时出现问题操作必须使用一个可更新的查询"错误的解决方法
- sqlserver"无法删除数据库,因为该数据库当前正在使用"问题解决
- 执行SQL语句时出现问题操作必须使用一个可更新的查询错误的解决方法
- [记录]在Linux中Oracle安装成功后,首次启动使用时,会出现的一些问题总结和解决办法
- sqlserver"无法删除数据库,因为该数据库当前正在使用"问题解决
- Cannot access NLS data files问题的解决办法
- DbEntry.net使用时出现System.Data.SqlTypes.SqlNullValueException解决办法
- oracle的SQL语句执行效率问题查找与解决方法
- Access的SQL语句中不能便用CEILING的解决办法
- 使用C#通过Oracle.DataAccess连接Oracle,部署时需要注意版本问题
- sybase导出来的sql建表语句导入Oracle出错--解决办法
- ACCESS模糊查询like的解决方法&&SQL查询语句通配符问题
- Oracle Sql语句长度限制问题及解决
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- Oracle的SQL语句执行效率问题查找与解决方法