我在.netFillSchema
上使用。OracleDataAdapter
在SelectCommand
全局临时表上工作。
对于第一次运行,这很好用。我会得到全局临时表的架构
然后我删除了那个临时表和一个具有不同模式的新临时表。
之后,对于第二次运行,该FillSchema
方法仍将返回旧删除的临时表中的模式。
我错过了什么吗?select 命令不应该从新版本的临时表中查询架构吗?
谢谢你的帮助!
我在.netFillSchema
上使用。OracleDataAdapter
在SelectCommand
全局临时表上工作。
对于第一次运行,这很好用。我会得到全局临时表的架构
然后我删除了那个临时表和一个具有不同模式的新临时表。
之后,对于第二次运行,该FillSchema
方法仍将返回旧删除的临时表中的模式。
我错过了什么吗?select 命令不应该从新版本的临时表中查询架构吗?
谢谢你的帮助!
什么不起作用: FillSchema 使用的 OracleDataAdapter.SelectCommand 是:
从表名中选择 *
什么有效: 我需要将该查询更改为确切的模式,然后它可以工作:
从 TableName 中选择 column1,column2,column3
我不明白为什么,但这解决了我的问题。它将返回新全局临时表的模式。这是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);
}
}