|
■No93096 (素人M さん) に返信
> VBからSQLサーバへ接続し、データを抽出する際、「@」の扱いについて教えてください
> 「SET @num = 0;」
> のように変数を使いたいと思っていますが、「@」が文字以外に認識されているようでうまく実行できません
どうやっているのか分かりませんが、こういう感じかな。
'--------- パターン1: VB 側で @変数を宣言 ---------
Module Module1
Sub Main()
'10.0日後の日時が返されるか?
Dim sql As String = "SET @num = 10; SELECT GETDATE() + @num"
Dim val As Date
Using con As New SqlConnection(My.Settings.ConnectionString)
con.Open()
Using cmd As SqlCommand = con.CreateCommand()
cmd.CommandText = sql
cmd.Parameters.Add("@num", SqlDbType.Int).Value = 0
val = CDate(cmd.ExecuteScalar())
End Using
End Using
'結果確認
Console.WriteLine(val.ToLongDateString())
Console.ReadLine()
End Sub
End Module
'--------- パターン2: SQL Server 側で @変数を宣言 ---------
Module Module1
Sub Main()
'12〜24 まで +2 ずつ増加した値が列挙されるか?
Dim sql As String = "
BEGIN
DECLARE @増分値 int = 2;
DECLARE @開始値 int;
DECLARE @終了値 int;
SET @開始値 = 12;
SET @終了値 = 24;
WITH 例 AS ( SELECT @開始値 AS 値
UNION ALL SELECT 値 + @増分値 FROM 例
WHERE 値 < @終了値) SELECT 値 FROM 例
END"
Dim tbl As New DataTable("SAMPLE")
Using con As New SqlConnection(My.Settings.ConnectionString)
con.Open()
Using da As New SqlDataAdapter(sql, con)
da.Fill(tbl)
End Using
End Using
For Each row As DataRow In tbl.Rows
Console.WriteLine(row.Field(Of Integer)("値"))
Next
Console.ReadLine()
End Sub
End Module
|