DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データ登録時の不思議な現象

環境/言語:[PostgreSQL9.0]
分類:[.NET]

いつもお世話になっております。
キャスと申します。

開発言語:vb.net2003
データベース:postgreSQL 9.0

早速ですが、現在マスタ登録画面を作成してまして
登録時に不思議な現象?が起こっています。
まずは、登録SQLをご確認頂ければと思います。


------------------------------------------------------------------------------
sqldata = "UPDATE mst_AAA SET " & _
"A = '" & Me.TextA.Text & "'," & _
"B = '" & Me.TextB.Text & "'," & _
"C = '" & Me.TextC.Text & "'," & _
"D = '" & Me.TextD.Text & "'," & _
"E = '" & Me.TextE.Text & "'," & _
"F = '" & Me.LinkLabel1.Text & " '," & _
"G = '" & Me.TextG.Text & "'," & _
"H = '-'," & _
"J = '" & Me.TextJ.Text & "' " & _
"WHERE K = '" & Me.TextK.Text & "' " & _
"AND M = '" & Me.TextM.Text & "'"

------------------------------------------------------------------------------

上記のSQLで登録はできるんですけど、
Me.LinkLabel1.Textの部分で不思議な現象がおきます。

本来ならば、
Me.LinkLabel1.Textのデータは”\\server\hoge\エクセル.xls”

と、ファイルパスがデータとして登録されるんですけど、
登録されたデータを確認してみると

”\serverhogeエクセル.xls”
と、\マークが消えてるんです。頭の\マークに関しては2つ消えてなくて
一つ消えてるだけなんです。


今回初めてpostgreを扱っているので、勉強不足の部分もあると思いますが、
何故こういう現象が起きてるかどなたかご教授頂ければと思っています。


以上、宜しくお願い致します。
■No28964に返信(キャスさんの記事)
バックスラッシュというのは\のことです。メタ文字というのは特別な意味をもつ文字のことです。
リンク先を読むとバックスラッシュは改行などの文字列定数を表現するためのメタ文字のようです。

「バックスラッシュ文字を含ませるときは2つのバックスラッシュ(\\)を記載します」
という記述がリンク先にあります。先頭の\\が\になったのはこのためだと思います。

『PostgreSQL 9.0.4文書 4.1.2. 定数』
http://www.postgresql.jp/document/9.0/html/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS

\\server\hoge\エクセル.xls
を登録するには
\\\\server\\hoge\\エクセル.xls
と入力すればよいと思いますが、SQLインジェクション対策も兼ねてパラメータークエリ
を利用することをおすすめします。
もりおさん
早速のご返信有難うございます。
また、ご連絡が遅くなり大変申し訳ございません。

今回データ登録方法として、手入力ではなくダイアログを開いて
ファイルを選択する方法をとっています。(添付ファイル参照願いします)

ですので、
> \\\\server\\hoge\\エクセル.xls
> と入力すればよいと思いますが、SQLインジェクション対策も兼ねてパラメータークエリ
> を利用することをおすすめします。

の方法は難しいかなと判断しています。
【理由】:ファイルは決まったところに置かれていない為。

自分も今、登録する為の関数などがないか調べているのですが。。。
関数がないとしても、他に方法あるのでしょうか。

以上、宜しくお願い致します。


■No28965に返信(もりおさんの記事)
> ■No28964に返信(キャスさんの記事)
> バックスラッシュというのは\のことです。メタ文字というのは特別な意味をもつ文字のことです。
> リンク先を読むとバックスラッシュは改行などの文字列定数を表現するためのメタ文字のようです。
>
> 「バックスラッシュ文字を含ませるときは2つのバックスラッシュ(\\)を記載します」
> という記述がリンク先にあります。先頭の\\が\になったのはこのためだと思います。
>
> 『PostgreSQL 9.0.4文書 4.1.2. 定数』
> http://www.postgresql.jp/document/9.0/html/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS
>
> \\server\hoge\エクセル.xls
> を登録するには
> \\\\server\\hoge\\エクセル.xls
> と入力すればよいと思いますが、SQLインジェクション対策も兼ねてパラメータークエリ
> を利用することをおすすめします。
添付ファイル: 1314923806.jpg (55 KB)
■No28967に返信(キャスさんの記事)
> ですので、
>>\\\\server\\hoge\\エクセル.xls
>>と入力すればよいと思いますが、SQLインジェクション対策も兼ねてパラメータークエリ
>>を利用することをおすすめします。
>
> の方法は難しいかなと判断しています。
> 【理由】:ファイルは決まったところに置かれていない為。

\\\\server\\hoge\\エクセル.xlsとするのが難しいのでしょうか?
パラメータークエリの利用が難しいのでしょうか?

もりおさんの指摘の通り、パラメータークエリに切り替えられるのであればそれがベストですが、
単に\マークを重ねるのであれば、Replaceを使えば簡単にできますよ。
ファイルを開くダイアログは関係ありません。
■No28967に返信(キャスさんの記事)
> 今回データ登録方法として、手入力ではなくダイアログを開いて
> ファイルを選択する方法をとっています。(添付ファイル参照願いします)

必要なパスが、固定であれダイアログ指定であれ何であれ、
とにかく、"\" → "\\" の置換作業を Replace メソッドで行ってから
SQL に渡せば済むと思いますが、それではダメなのでしょうか。


>>とSQLインジェクション対策も兼ねてパラメータークエリ
>>を利用することをおすすめします。
> の方法は難しいかなと判断しています。
> 【理由】:ファイルは決まったところに置かれていない為。

ファイル位置が不定であれ固定であれ、パラメータクエリの
利用方法は変わらないと思いますよ。

もりおさん
ピーコさん
魔界の仮面弁士さん

ご連絡が遅くなって申し訳ございません。

私の勉強不足で、Replaceの使い方をわかっていませんでした。
一度、Replaceを使用して置き換えで試してみたいと思います。

結果は、またご連絡させて頂きます。

以上、宜しくお願い致します。


■No28970に返信(魔界の仮面弁士さんの記事)
> ■No28967に返信(キャスさんの記事)
>>今回データ登録方法として、手入力ではなくダイアログを開いて
>>ファイルを選択する方法をとっています。(添付ファイル参照願いします)
>
> 必要なパスが、固定であれダイアログ指定であれ何であれ、
> とにかく、"\" → "\\" の置換作業を Replace メソッドで行ってから
> SQL に渡せば済むと思いますが、それではダメなのでしょうか。
>
>
> >>とSQLインジェクション対策も兼ねてパラメータークエリ
> >>を利用することをおすすめします。
>>の方法は難しいかなと判断しています。
>>【理由】:ファイルは決まったところに置かれていない為。
>
> ファイル位置が不定であれ固定であれ、パラメータクエリの
> 利用方法は変わらないと思いますよ。

もりおさん
ピーコさん
魔界の仮面弁士さん

お世話になっております、キャスです。
結果をご連絡させて頂きます。

------------------------------------------------------------------------------

str1 = Me.LinkLabel1.Text
str2 = str1.Replace("\", "\\")

sqldata = "UPDATE mst_AAA SET " & _
"A = '" & Me.TextA.Text & "'," & _
"B = '" & Me.TextB.Text & "'," & _
"C = '" & Me.TextC.Text & "'," & _
"D = '" & Me.TextD.Text & "'," & _
"E = '" & Me.TextE.Text & "'," & _
"F = '" & str2 & " '," & _
"G = '" & Me.TextG.Text & "'," & _
"H = '-'," & _
"J = '" & Me.TextJ.Text & "' " & _
"WHERE K = '" & Me.TextK.Text & "' " & _
"AND M = '" & Me.TextM.Text & "'"

------------------------------------------------------------------------------

上記のSQLで、
Fのカラムに\\server\hoge\エクセル.xls
と、登録ができました。本当に有難うございました。

皆様、本当に有難うございます。
問題解決です。


以上、宜しくお願い致します。



■No28972に返信(キャスさんの記事)
>
> もりおさん
> ピーコさん
> 魔界の仮面弁士さん
>
> ご連絡が遅くなって申し訳ございません。
>
> 私の勉強不足で、Replaceの使い方をわかっていませんでした。
> 一度、Replaceを使用して置き換えで試してみたいと思います。
>
> 結果は、またご連絡させて頂きます。
>
> 以上、宜しくお願い致します。
>
>
> ■No28970に返信(魔界の仮面弁士さんの記事)
>>■No28967に返信(キャスさんの記事)
> >>今回データ登録方法として、手入力ではなくダイアログを開いて
> >>ファイルを選択する方法をとっています。(添付ファイル参照願いします)
>>
>>必要なパスが、固定であれダイアログ指定であれ何であれ、
>>とにかく、"\" → "\\" の置換作業を Replace メソッドで行ってから
>>SQL に渡せば済むと思いますが、それではダメなのでしょうか。
>>
>>
>>>>とSQLインジェクション対策も兼ねてパラメータークエリ
>>>>を利用することをおすすめします。
> >>の方法は難しいかなと判断しています。
> >>【理由】:ファイルは決まったところに置かれていない為。
>>
>>ファイル位置が不定であれ固定であれ、パラメータクエリの
>>利用方法は変わらないと思いますよ。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板