none
SQLコマンド内での変数の使用 RRS feed

  • 質問

  • SQLコマンド内(SELECT ~ FROM ~等)で、VBのプログラム上で定義した変数(Dim Private Public等)を使用したいのですが,

    方法はあるのでしょうか?

    よろしくお願いします。

    2010年10月6日 4:37

回答

  • >といった形で利用したい、ということです

     

    バインド変数を利用する方法をお勧めしますが、ご要望のものであれば単純に文字列結合でいいと思います。

        ' 数値などの場合
        Dim sample1 As Integer = 0
        Dim sql1 As String = "SELECT a FROM b WHERE c =" + sample1.ToString()
        ' 文字列の場合
        Dim sample2 As String = "d"
        Dim sql2 As String = "SELECT a FROM b WHERE c ='" + sample2 + "'"
    
    

     

    • 回答としてマーク 山本春海 2010年10月18日 7:35
    2010年10月6日 5:47
  • > バインド変数を利用する方法をお勧めしますが、ご要望のものであれば単純に文字列結合でいいと思います。

    文字列結合は確かに簡単なのですが、SQLインジェクションの抜け道になる恐れがあるので、初心者からでも以下のようにパラメタライズドクエリを使う習慣を身に着けるよう、強くお勧めいたします。

    Public Sub Test()
    
    	Public sample As String = "hogehoge"
    
    	Dim cn = New SqlConnection(接続文字列)
    	Dim command As New SqlCommand("SELECT a FROM b WHERE c = @sample", cn)
    	command.Parameters.AddWithValue("@sample", sample)
    	Dim da As New SqlDataAdapter(command)
    	Dim dt As New DataTable()
    	da.Fill(dt)
    
    End Sub
    


    SQLインジェクションに関しては以下の記事を参考にしてください。

    SQLインジェクション - Wikipedia

    今夜分かるSQLインジェクション対策

     


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク 山本春海 2010年10月18日 7:35
    2010年10月6日 6:26
    モデレータ

すべての返信

  • >VBのプログラム上で定義した変数(Dim Private Public等)を使用したい

     

    説明が漠然としているので憶測ですが、バインド変数で解決できるのではないでしょうか。

    バインド変数とは

    http://e-words.jp/w/E38390E382A4E383B3E38389E5A489E695B0.html

    バインド変数を利用したサンプル

    http://msdn.microsoft.com/ja-jp/library/bbw6zyha.aspx

    http://flashcast.jp/blog/2010/01/vbnetdb.html

    2010年10月6日 4:58
  • ありがとうございます!

     

    補足ですが、

    単純に

    Public sample As String

    で定義したsampleを

    SELECT a FROM b WHERE c = sample

    といった形で利用したい、ということです。。。

     

    2010年10月6日 5:42
  • >といった形で利用したい、ということです

     

    バインド変数を利用する方法をお勧めしますが、ご要望のものであれば単純に文字列結合でいいと思います。

        ' 数値などの場合
        Dim sample1 As Integer = 0
        Dim sql1 As String = "SELECT a FROM b WHERE c =" + sample1.ToString()
        ' 文字列の場合
        Dim sample2 As String = "d"
        Dim sql2 As String = "SELECT a FROM b WHERE c ='" + sample2 + "'"
    
    

     

    • 回答としてマーク 山本春海 2010年10月18日 7:35
    2010年10月6日 5:47
  • ありがとうございます!

    できました!

    2010年10月6日 6:06
  • > バインド変数を利用する方法をお勧めしますが、ご要望のものであれば単純に文字列結合でいいと思います。

    文字列結合は確かに簡単なのですが、SQLインジェクションの抜け道になる恐れがあるので、初心者からでも以下のようにパラメタライズドクエリを使う習慣を身に着けるよう、強くお勧めいたします。

    Public Sub Test()
    
    	Public sample As String = "hogehoge"
    
    	Dim cn = New SqlConnection(接続文字列)
    	Dim command As New SqlCommand("SELECT a FROM b WHERE c = @sample", cn)
    	command.Parameters.AddWithValue("@sample", sample)
    	Dim da As New SqlDataAdapter(command)
    	Dim dt As New DataTable()
    	da.Fill(dt)
    
    End Sub
    


    SQLインジェクションに関しては以下の記事を参考にしてください。

    SQLインジェクション - Wikipedia

    今夜分かるSQLインジェクション対策

     


    ひらぽん http://d.hatena.ne.jp/hilapon/
    • 回答としてマーク 山本春海 2010年10月18日 7:35
    2010年10月6日 6:26
    モデレータ