C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: PL/SQLをコンパイルするとスペースが・・・


(過去ログ 67 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■38859 / inTopicNo.1)  PL/SQLをコンパイルするとスペースが・・・
  
□投稿者/ ひろし (1回)-(2009/07/26(Sun) 20:33:07)

分類:[.NET 全般] 

WindowsVista HomeEdition
C#2008
Oracle9(?)

度々お世話になります。

現在、PL/SQLのソースをコンパイルするプログラムを作成しているのですが、
コンパイルすると、毎行、末尾に半角スペースが付加されてしまいます。

コンパイルするSQLを作成する際に \r\n でつなげてるのが問題なのかと思い
\n のみにしたりもしてみましたが結果は同じでした。orz

ソースは以下の通りです。

OleDbCommand cmd = new OleDbCommand(sql, conn);
int cnt = cmd.ExecuteNonQuery();

ご存知の方、よろしくお願いします。
引用返信 編集キー/
■38860 / inTopicNo.2)  Re[1]: PL/SQLをコンパイルするとスペースが・・・
□投稿者/ もりお (18回)-(2009/07/26(Sun) 21:44:59)
2009/07/26(Sun) 21:46:18 編集(投稿者)

No38859 (ひろし さん) に返信
確認してみたいので、もう少し詳しく教えてくださいな。

・半角スペースは SQL の実行結果に付加されるのですか。
 それとも、SQL 文自体に付加されるのでしょうか。

・どのようにして半角スペースの付加されたものを確認できますか。

・本来どのようになってほしいのでしょうか。

・どのような SQL 文を発行されたのでしょうか。
引用返信 編集キー/
■38928 / inTopicNo.3)  Re[2]: PL/SQLをコンパイルするとスペースが・・・
□投稿者/ ひろし (2回)-(2009/07/27(Mon) 23:33:46)
No38860 (もりお さん) に返信
> 2009/07/26(Sun) 21:46:18 編集(投稿者)
>

コメントありがとうございます。

ちょっと情報が少なかったようで申し訳ありません。

> ・半角スペースは SQL の実行結果に付加されるのですか。
>  それとも、SQL 文自体に付加されるのでしょうか。
まずコンパイルする文字列をイミディエイトウインドウで表示してみると以下の様になります。

"create or replace procedure プロシージャ名\r\n(引数1 in varchar2,\r\n・・・・・

コンパイルした後に

string sql = "SELECT text FROM user_source where name = '" + procName + "' and type = '" + procType + "' order by line";
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter(sql, connectStr);
da.Fill(dt);

で取得すると

"create or replace procedure プロシージャ名 \n"

           ここにスペースが入ってしまいますorz
\n の部分は

if(text.EndsWith("\n")) {
text = text.Substring(0, text.Length - 1);
}
if(text.EndsWith("\r")) {
text = text.Substring(0, text.Length - 1);
}
こんな感じで除去してます。(いい方法かどうかは微妙ですが・・・)

> ・どのようにして半角スペースの付加されたものを確認できますか。
上記の通りです。

> ・本来どのようになってほしいのでしょうか。
"create or replace procedure プロシージャ名\n"
本来は上記の様になってほしいです。
(\nの前にスペースが入らないようになってほしいです)

> ・どのような SQL 文を発行されたのでしょうか。
こちらも上記の通りです。


VB6で同じデータベースに対して同じようにコンパイルするプログラムを
作成していましたが、スペースが付くような事は無かったです。

なにか思い当たることがありましたら、よろしくお願いいたします。


引用返信 編集キー/
■38929 / inTopicNo.4)  Re[3]: PL/SQLをコンパイルするとスペースが・・・
□投稿者/ ひろし (3回)-(2009/07/27(Mon) 23:36:20)
> "create or replace procedure プロシージャ名 \n"
> ↑
>            ここにスペースが入ってしまいますorz

矢印の位置がずれてしまいました・・・・
\n の前にスペースが入ってしまいます。です。
引用返信 編集キー/
■38933 / inTopicNo.5)  Re[3]: PL/SQLをコンパイルするとスペースが・・・
□投稿者/ やじゅ (1138回)-(2009/07/28(Tue) 02:33:55)
やじゅ さんの Web サイト
No38928 (ひろし さん) に返信
> VB6で同じデータベースに対して同じようにコンパイルするプログラムを
> 作成していましたが、スペースが付くような事は無かったです。
>
> なにか思い当たることがありましたら、よろしくお願いいたします。

VB6と.NETでの違いと言えば、VB6.0の場合コード内部で使用する文字コードはUniCodeですが、
表示やファイル処理、外部とのやり取りは全てSift-Jisです。.NETは、全てUniCodeです。

Oracle側の文字コードは何になってますか? NLS_CHARACTERSET
http://shodai.hp.infoseek.co.jp/oracle_global/oracle_global.html

また、select dump(text) FROM と、dumpで見た場合にスペース表示される部分のコードは 
何になっていますか?

どの段階で、半角スペースに変換されているのでしょうか?
・コンパイル前のDB上での値の段階(Oracle上で確認)
・コンパイル後のDB上での値の段階(Oracle上で確認)
・OleDbDataAdapterで取得した段階(.NET上で確認)
・textに値がセットされた段階(.NET上で確認)
引用返信 編集キー/
■38935 / inTopicNo.6)  Re[3]: PL/SQLをコンパイルするとスペースが・・・
□投稿者/ もりお (19回)-(2009/07/28(Tue) 06:16:40)
No38928 (ひろし さん) に返信
ODP.NET を利用すると
"create or replace procedure プロシージャ名\r\n"
こんな具合で、空白に変換されることは回避できるみたいです。
一応、参考までに。
引用返信 編集キー/
■39073 / inTopicNo.7)  Re[4]: PL/SQLをコンパイルするとスペースが・・・
□投稿者/ ひろし (4回)-(2009/07/29(Wed) 23:36:58)
コメントありがとうございます。

No38933 (やじゅ さん) に返信
> VB6と.NETでの違いと言えば、VB6.0の場合コード内部で使用する文字コードはUniCodeですが、
> 表示やファイル処理、外部とのやり取りは全てSift-Jisです。.NETは、全てUniCodeです。
>
> Oracle側の文字コードは何になってますか? NLS_CHARACTERSET
> http://shodai.hp.infoseek.co.jp/oracle_global/oracle_global.html
文字コードは JA16SJIS でした。

> また、select dump(text) FROM と、dumpで見た場合にスペース表示される部分のコードは 
> 何になっていますか?
32 になっておりましたので、やはり半角スペースになっているみたいです。

> どの段階で、半角スペースに変換されているのでしょうか?
> ・コンパイル前のDB上での値の段階(Oracle上で確認)
> ・コンパイル後のDB上での値の段階(Oracle上で確認)
> ・OleDbDataAdapterで取得した段階(.NET上で確認)
> ・textに値がセットされた段階(.NET上で確認)
まず、ObjectBrowserなどでコンパイルされたストアドのソースを自分が作成したツールで取得した場合は
スペースが入らず正しく取得できています。
よって、下の2つは問題ないみたいです。

で、すみませんが「コンパイル前」と言うことの回答になっているかどうか分からないですが
以下の手順により確認しました。

@ObjectBrowserなどでコンパイルし、データベースを直接確認。
⇒スペースが入っていないことを確認しました。
A自作のツールで@でコンパイルしたソースを取得
⇒スペースが入っていないことを確認しました。
B編集せずに、そのままコンパイルし直接データベースを確認
⇒毎行、末尾(\nの直前)にスペースが入っているのを確認しました。orz

会社に行かないと試せないのですが、sift_jis に変換してコンパイルしてみようかと思います。

引用返信 編集キー/
■39074 / inTopicNo.8)  Re[4]: PL/SQLをコンパイルするとスペースが・・・
□投稿者/ ひろし (5回)-(2009/07/29(Wed) 23:39:03)
コメントありがとうございます。

No38935 (もりお さん) に返信
> ODP.NET を利用すると
> "create or replace procedure プロシージャ名\r\n"
> こんな具合で、空白に変換されることは回避できるみたいです。
> 一応、参考までに。

ODP.NET ってのもあるんですね!
解決できない場合は、そちらの方も視野に入れて考えたいと思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -