0

私は.netで使用FillSchemaしています。グローバル一時テーブルで動作しますOracleDataAdapterSelectCommand

最初の実行では、これはうまく機能します。グローバル一時テーブルのスキーマを取得します

次に、その一時テーブルを削除し、別のスキーマを持つ新しい一時テーブルを作成します。

その後、2 回目の実行では、FillSchemaメソッドは削除された古い一時テーブルからスキーマを返します。

何か不足していますか?select コマンドは、新しいバージョンの一時テーブルからスキーマをクエリするべきではありませんか?

助けてくれてありがとう!

4

2 に答える 2

0

何が機能しなかったか: FillSchema で使用された OracleDataAdapter.SelectCommand は次のとおりです。

テーブル名から*を選択

何が機能するか: そのクエリを正確なスキーマに変更する必要がありましたが、それは機能します:

TableName から column1,column2,column3 を選択

正確な理由はわかりませんが、問題は解決しました。新しいグローバル一時テーブルのスキーマを返します。これは Oracle サーバーのキャッシングの問題ですか? tableName は常に同じだからですか?

于 2014-10-16T08:17:35.207 に答える
-1

この問題を解決する手順を使用するには

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);
     }
}
于 2015-12-22T07:49:23.850 に答える