文字列連結について

解決


ぽっぽ  2009-02-04 19:33:13  No: 141462  IP: 192.*.*.*

Microsoft Visual Studio .NET 2003
.Net Framework 1.1
VB.net

文字列連結について質問です。
初歩的な質問ですみません。

通常、下記のように
dim strABC AS string
strABC = "あああ"
strABC =strABC & "いいい"
というように連結をおこなった場合、
strABCの中身は"あああいいい"となると思います。

しかし下記の記述で行った際にうまく連結がおこなえませんでした。
どなたかアドバイスをいただけないでしょうか?
===================================================================
Dim strDB As String
strDB = "provider=OraOLEDB.Oracle.1;Data Source=" & mClsCONST.strHost & _
                ";persist Security Info=False;User ID=" & mClsCONST.strUser & _
                ";Password=" & mClsCONST.strPass
===================================================================
確認↓↓
?strDB
"provider=OraOLEDB.Oracle.1;Data Source=XXXXXX
※『XXXXXX』はmClsCONST.strHostです

編集 削除
魔界の仮面弁士  2009-02-04 20:23:45  No: 141463  IP: 192.*.*.*

# 接続文字列の構築には、OleDbConnectionStringBuilder を使うべき……
# と書こうとしたのですが v1.1 なので使えないですね。


> しかし下記の記述で行った際にうまく連結がおこなえませんでした。
文字列の接続そのものは、それで正しいはずです。

もしかして、接続情報を ini ファイルから取得していませんか?

文字列の末尾に ChrW(0) すなわち vbNullChar が存在する場合、
?strDB などでは、それ以降の文字が表示されませんので、
そうした異常なデータが紛れ込んでいないか、確認してみてください。


Module Module1
    Sub Main()
        Dim strDB As String
        strDB = "provider=OraOLEDB.Oracle.1;Data Source=" & mClsCONST.strHost & _
                        ";persist Security Info=False;User ID=" & mClsCONST.strUser & _
                        ";Password=" & mClsCONST.strPass
        MsgBox(strDB)
    End Sub

    Class mClsCONST
        Public Shared strHost As String = "XXXX" & vbNullChar
        Public Shared strUser As String = "YYYY" & vbNullChar
        Public Shared strPass As String = "ZZZZ" & vbNullChar
    End Class
End Module

編集 削除
ぽっぽ  2009-02-05 09:18:25  No: 141464  IP: 192.*.*.*

>もしかして、接続情報を ini ファイルから取得していませんか?
>
>文字列の末尾に ChrW(0) すなわち vbNullChar が存在する場合、
>?strDB などでは、それ以降の文字が表示されませんので、
>そうした異常なデータが紛れ込んでいないか、確認してみてください。

iniファイルより取得を行っていました。
strDB = Replace("provider=OraOLEDB.Oracle.1;Data Source=" & mClsCONST.strHost & _
                        ";persist Security Info=False;User ID=" & mClsCONST.strUser & _
                        ";Password=" & mClsCONST.strPass,vbNullChar,"")

Replaceを使用し、置換することで解決しました。
ありがとうございました。

編集 削除
魔界の仮面弁士  2009-02-05 10:45:37  No: 141465  IP: 192.*.*.*

> Replaceを使用し、置換することで解決しました。
「vbNullChar を "" に置き換える」という対応方法ではなく、

(修正案1) GetPrivateProfileStringW の戻り値は「有効な文字数」なので、
   その戻り値を用いて、その文字数のみを取り出す。

(修正案2) vbNullChar とそれ以降の文字を切り捨てる。

のように修正される事をお奨めします。

編集 削除
ぽっぽ  2009-02-09 19:26:27  No: 141466  IP: 192.*.*.*

>(修正案1) GetPrivateProfileStringW の戻り値は「有効な文字数」なので、
>   その戻り値を用いて、その文字数のみを取り出す。

【vbNullChar を "" に置き換える】という対応方法で行うと、空白文字ができてしまう為、修正案1を使用することで解決しました。

ありがとうございました!!

編集 削除