C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

VBからのSQLについて

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■93096 / inTopicNo.1)  VBからのSQLについて
  
□投稿者/ 素人M (1回)-(2019/11/19(Tue) 23:18:55)

分類:[VB.NET/VB2005 以降] 


VBからSQLサーバへ接続し、データを抽出する際、「@」の扱いについて教えてください

「SET @num = 0;」

のように変数を使いたいと思っていますが、「@」が文字以外に認識されているようでうまく実行できません

どのように記述したら良いでしょうか?
引用返信 編集キー/
■93097 / inTopicNo.2)  Re[1]: VBからのSQLについて
□投稿者/ WebSurfer (1971回)-(2019/11/20(Wed) 06:43:48)
No93096 (素人M さん) に返信

> 「SET @num = 0;」
>
> のように変数を使いたいと思っていますが、

VB.NET でそのように書くことはないと思うのですが?

何をしたいのかもう少し詳しく書いてください。あと、開発環境も。
引用返信 編集キー/
■93098 / inTopicNo.3)  Re[1]: VBからのSQLについて
□投稿者/ kiku (142回)-(2019/11/20(Wed) 08:57:54)
No93096 (素人M さん) に返信
>
> VBからSQLサーバへ接続し、データを抽出する際、「@」の扱いについて教えてください
>
> 「SET @num = 0;」
>
> のように変数を使いたいと思っていますが、「@」が文字以外に認識されているようでうまく実行できません
>
> どのように記述したら良いでしょうか?

DBのテーブル上の項目名に@が含まれるということでしょうか?

だとしたら、
.NETの世界では@は下記のように別の機能に使われますので、
可能であれば、項目名に@が含まれないようにした方が、
今後の保守のためにも良いと思います。

http://masa49406.blogspot.com/2014/01/vbnetsqlcommand-sqlparameter.html

引用返信 編集キー/
■93101 / inTopicNo.4)  Re[1]: VBからのSQLについて
□投稿者/ 魔界の仮面弁士 (2490回)-(2019/11/20(Wed) 09:46:44)
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

引用返信 編集キー/
■93102 / inTopicNo.5)  Re[1]: VBからのSQLについて
□投稿者/ 大谷刑部 (62回)-(2019/11/20(Wed) 10:03:51)
No93096 (素人M さん) に返信
>
> VBからSQLサーバへ接続し、データを抽出する際、「@」の扱いについて教えてください
どこまでをVB側で記載してますか?
また、接続手段は?(ADO.netのネーティブクライアントかどうかとか)

> 「SET @num = 0;」
SQL文中、またはT-SQLプロシージャへの引数に値を渡すことは比較的よくやる手段とは思いますが、
T-SQL内の変数代入構文が通るかどうかは知りません。
ていうか、VB(ADO.net?)側のコマンドテキストにその構文を書く必要がある理由は何ですか?

> のように変数を使いたいと思っていますが、「@」が文字以外に認識されているようでうまく実行できません
そう考えた根拠は?
エラーメッセージが表示されてるならその情報も提示してください。
そうでないと頓珍漢な回答が続出すると思います。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ