作者however1983 ()
看板Visual_Basic
標題[.NET] SQL查詢時利用變數當參數的問題
時間Fri Mar 16 12:46:32 2007
一直被這一個看似簡單的問題困擾了很久,
在利用SelectCommand時我把一個變數當作SQL where條件的參數,
程式碼如下:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TaskID As String
Dim SeqID As String
Dim Seq As String
TaskID = Me.DropDownList1.SelectedValue
Dim sds2 As New System.Web.UI.WebControls.SqlDataSource
sds2.ConnectionString = "Data Source=SHANE;Initial Catalog=AS;Persist Security Info=True;User ID=sa;Password=5408"
sds2.SelectCommand = "select [順序編碼] from [Tasks] where 任務ID = '" & TaskID & "'"
Dim dv2 As Data.DataView = sds2.Select(New DataSourceSelectArguments)
Me.GridView2.DataSource = dv2
SeqID = dv2.Item(0).Item(0)
Response.Write(SeqID)
Dim sds As New System.Web.UI.WebControls.SqlDataSource
sds.ConnectionString = "Data Source=SHANE;Initial Catalog=AS;Persist Security Info=True;User ID=sa;Password=5408"
sds.SelectCommand = "select * from [Tasks]
where (順序編碼 like '%" & SeqID & "%')"
Dim dv As Data.DataView = sds.Select(New DataSourceSelectArguments)
Me.GridView1.DataSource = dv
Me.GridView1.DataBind()
End Sub
重點在 (順序編碼 like '%" & SeqID & "%')
雖然在SeqID連接兩個%字元,可是查詢的結果跟沒有連接%的結果一樣...
但若是先傳入一個固定值給SeqID,例如 SeqID=123 這樣的結果就會正確。
我想可能是SeqID & "%" 後中間會多一個空白字元(例如:123 %,而非123%)所造成的。
這個問題讓我這個程式新手想了蠻久的,也搜尋不到相關的資訊,
希望有人能指點一下,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.108.132
推 LPH66:改用 str(SeqID) 03/16 15:33
推 seagal:最好不要用字串組合的方式下SELECT 03/16 15:41
推 seagal:會有SQL injection的問題 03/16 15:41
推 however1983:感謝!我用L大的方法可以解決中間空一格的問題了! 03/16 15:52
→ however1983:可是還是select不出東西 囧 03/16 15:52
→ however1983:把SeqID response.write出來的數字代進去可以,可是 03/16 15:55
→ however1983:用" & Seq & "代進去就是沒結果 ... 03/16 15:56
推 however1983:可以了! 感謝s大~我用long的型態代進去就沒問題囉~ 03/16 16:03
推 fumizuki:dv2.Item(0).Item(0).Value.ToString() 這樣寫比較好? 03/17 08:55
推 fumizuki:Replace(SeqID, "'", "''") 一個單引號取代為2個單引號 03/17 08:55
推 however1983:感謝版大的建議! 03/17 18:22