投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/5/24 14:37:20
> 文字列として扱うかという認識なのですがあってますでしょうか?
その通りです。ですから当初の
 "SELECT [ID], [所在], [種類] FROM [Table] WHERE Item Like N'%"…
という表現だと、ComboBox の内容とは無関係に、常に「Item」という名前のフィールドとして処理されるわけですね。


> " & ○ & "の"&はどうゆう役割なのでしょうか?

ご存知のように、「&」は文字列連結のための演算子ですし、
「"」は文字列リテラルを囲む記号です。

Dim s1 As String = "abc"
Dim s2 As String = "xyz"
Dim s3 As String = s1 & s2

上記のうち、変数 s1 、s2 の部分を置き換えると
Dim s3 As String = "abc" & "xyz"
になりますよね。この処理結果は
Dim s3 As String = "abcxyz"
となるわけですが、それと全く同じことです。


先の SQL で言うと、たとえば、
 Dim fieldName As String = "Id"
 Dim searchWord As String = "0"
 Dim sql As String = "WHERE [" & fieldName & "] LIKE N'%" & searchWord & "%' "
というコードがあるとすれば、
 Dim sql As String = "WHERE [" & "Id" & "] LIKE N'%" & "0" & "%' "
という形に展開されるので、結果として
 Dim sql As String = "WHERE [Id] LIKE N'%0%' "
という文字列が得られることになるわけです。


なお、VB2015 以降の場合は、& 演算子で繋いでいくよりも、
 Dim fieldName As String = "Id"
 Dim searchWord As String = "0"
 Dim sql As String = $"WHERE [{fieldName}] LIKE N'%{searchWord}%' "
の構文を使った方が読みやすいかもしれません。


> という形でも動くのですがどうなんでしょうか?
間違いではないのですが、SelectedItem プロパティの戻り値は Object 型なので、
そのコードだと「Option Strict On」でコンパイルした時にエラーとなりますね。

また、ComboBox の DisplayMember プロパティを利用している場合には、
GetItemText メソッドを通じて取得するようにしないと、正しい文字列表現になりません。

それと、ComboBox でまだ何も選択されていない場合には、
ComBox1.SelectedIndex は -1 を返し、
ComBox1.SelectedItem は Nothing を返すことにも注意しましょう。