我在.net中的OracleDataAdapter
上使用FillSchema
。SelectCommand
在全局临时表上工作。
对于第一次运行,这非常有效。我将获得全局临时表的模式
然后我放下那个临时表,用不同的模式创建一个新的临时表。
之后,对于第二次运行,FillSchema
方法仍将从旧的丢弃的临时表中返回模式。
我是不是错过了什么?select命令不应该从新版本的临时表中查询架构吗?
谢谢你的帮助!
什么不起作用:使用的OracleDataAdapter.SelectCommandFillSchema为:
从TableName 中选择*
工作原理:我需要将该查询更改为确切的模式,然后它工作:
从TableName 中选择列1、列2、列3
我不明白为什么,但这解决了我的问题。它将返回新的全局临时表的模式。这是oracle服务器的缓存问题吗?因为tableName总是一样吗?
使用过程方法解决此问题
OracleParameter inputParam = new OracleParameter("TABLE_NAME_IN",OracleDbType.Varchar2,"TEST",ParameterDirection.Input); //Query TableName
OracleParameter refParam = new OracleParameter("OUTPUT",OracleDbType.RefCursor,ParameterDirection.Output);//RefCursor
DataTable dt = new DataTable();//Fill DataTable
using (OracleCommand dbCommand = new OracleCommand("PKG_SYS.SELECT_TABLE_DATA",orclConnection))
{
dbCommand.CommandType = CommandType.StoredProcedure;
dbCommand.Parameters.Add(inputParam);
dbCommand.Parameters.Add(refParam);
using (OracleDataAdapter da = new OracleDataAdapter())
{
da.SelectCommand = dbCommand;
da.Fill(dt);
}
}