これは私が取り組むべき仕事のようには思えないので、この段階ではかなり愚かだと感じていますが、少し眠った後、1000の考えが私の頭の中を駆け巡り、私は今、トンネルのある鍋の中のカエルだと思います.ソリューションを曇らせるビジョンウイルス。ここに行きます:
DBMS_XMLGEN.getxml を使用して、いくつかのテーブルから XML 形式 (1 行、1 列が CLOB 型) にデータを選択する PL/SQL のクエリがあります。これは完全に機能します。
私の問題は、この XML 出力を C# に返し、この出力を自分の PC で output.xml ファイルとして保存する場所をユーザーに尋ねることです。
私はJQuery(AJAX)でASP.netを使用しているため、リンクがクリックされたときに.aspxページに投稿し、返されたデータ(このインスタンスのクエリからのxml)を使用して保存します。OLEDBデータリーダーでOLEDBコマンドを使用するのは正しい方法ではないようです...
これを行う最善の方法は何ですか?私は .net 内でシリアル化をあまり行っていませんが、これが最善の方法であると思います (私が行った調査によると)。私の状況でこれを行う方法の例はありますか?
私の考えは、基本的にこの出力/ファイルをメモリに作成し、ユーザーに保存先を尋ね、.xml ファイルとして保存し、メモリをクリアすることです。
更新: OK、クエリからの xml 出力を簡単に受け入れる XMLDocument を作成できました。このファイルを自分のPCのどこに保存するかについて、ユーザーから入力を得るにはどうすればよいですか?
これまでの私のコード:
Javascript :
function XML_ExportAppRestrictions() {
try {
var data = {"action": "exportAppRestrictions"};
var returned = AjaxLoad('Modules/Common/Common.aspx', null, data, null, null, false);
if (returned.toString().toUpperCase().substring(0, 5) == "ERROR") {
return;
}
else {
// should the file be saved here or in my aspx page using xmldoc.save?
// Using xmldoc.save will only be able to save the file on the server yes?
}
}
catch (ex) {
alert(ex.Message);
}
}
ASP:
if (Request["action"] == "exportAppRestrictions")
{
// Create and open DB connection
conn.ConnectionString = SG_Common.CommonClass.NetRegUDL;
common.OpenDBConnection(ref conn);
// Create command and set SQL statement
cmd.Connection = conn;
cmd.CommandType = System.Data.CommandType.Text;
// select text was removed below due to it's length
cmd.CommandText = "select x as AppRestrictions from dual";
rd = cmd.ExecuteReader();
if (rd.HasRows)
{
if (rd.Read())
{
str = rd["AppRestrictions"].ToString();
}
}
rd.Close();
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
xmldoc.InnerXml = str;
xmldoc.Save("c:\\xmltest.xml");
goto Done;
}
// Done runs in a seperate try/catch statement and only returns data to the calling js function.
Done:
Response.Write(str);