- 題名: VBソース中のSQL文について
- 日時: 2009/04/16 14:23:10
- ID: 24412
- この記事の返信元:
- (なし)
- この記事への返信:
- [24414] Re[1]: VBソース中のSQL文について2009/04/16 22:19:35
- [24415] Re[1]: VBソース中のSQL文について2009/04/17 9:15:46
- ツリーを表示
> VBの中に長いSQL文を入れると、横に広がって見ずらいのですが、
> 下手に改行しても構文エラーになってしまいます。
>
> みなさんはSQL文を見やす工夫されていることはありますか?
あくまで文字列の足し算で解決できますヨ!
Dim szSql as String
szSql = "select "
szSql += "* "
szSql += "from "
szSql += "HogeHoge "
szSql += "where "
szSql += "hoge = 1"
※ 1行に書かれているSQL文を分割する際、語句と語句の間の
空白を残さないと当然構文エラーになります。
ちょっと変わった方法
Using con As SqlConnection = New SqlConnection("hogehogehoge")
bRet = False
Try
con.Open()
bRet = True
Catch ex As Exception
bRet = False
End Try
If bRet Then
Dim szSql As StringBuilder
szSql = New StringBuilder
With szSql
.Length = 0
.Append("select ")
.Append("* ")
.Append("form ")
.Append("HogeHoge ")
.Append("where ")
.Append("Hpge1=1 and ")
.Append("Hoge2=2")
End With
Using ds As DataSet = New DataSet
Using ad As SqlDataAdapter = New SqlDataAdapter
Using cmd As SqlCommand = con.CreateCommand
With cmd
.CommandType = CommandType.Text
.CommandTimeout = con.ConnectionTimeout
.CommandText = szSql.ToString
End With
ad.SelectCommand = cmd
Try
ad.Fill(ds, "HogeHoge")
bRet = True
Catch ex As Exception
bRet = False
End Try
End Using
End Using
If bRet Then
' ds 使って処理・・・
End If
End Using
con.Close()
End If
End Using
※ 実行していないので動作するよう自身で加工
して下さい。
以上。
■No24412に返信(RENさんの記事)
> VBの中に長いSQL文を入れると、横に広がって見ずらいのですが、
> 下手に改行しても構文エラーになってしまいます。
固定的な SQL の場合、ソースコード中に埋め込むのではなく、
型付 DataSet のデザイナから、TableAdapter 内に SQL を封じ込めたり、
あるいは、文字列リソースに SQL を格納するなどの方法をとっています。
また、動的に SQL を生成せねばならない場合には、
SQL &= " GROUP BY 売上年月"
SQL &= " ORDER BY 売上年月, 売上合計"
などのように、文字列連結で対応しています。
(実際には、StringBuilder を利用した SQL 生成用のヘルパクラスを作って
動的生成させる仕組みとして実装していますが)
また、改行などを含める必要がある場合においては、
稀に下記のように記述することもあります。
Dim sql As String = <![CDATA[
SELECT
PostID, -- 投稿No
Poster, -- 投稿者
Title, -- 題名
Message -- 本文
FROM
BBS
WHERE
BBSID = 'dobon.net'
]]>.Value
分類:[.NET]
お世話になります
まだVBを組み始めたばかりの初心者です。
VBの中に長いSQL文を入れると、横に広がって見ずらいのですが、
下手に改行しても構文エラーになってしまいます。
みなさんはSQL文を見やす工夫されていることはありますか?