2012-07-12 71 views
0

嗨,我是新的程序員asp.net和vb.net。我想用通配符搜索引擎。 我很困惑把通配符(%)。如何添加通配符?

Protected Sub search() 
     Dim ds As New DataSet 
     Dim cls As New Class1 

     ds = cls.returndataset("select * from student where Nama_Depan like '" & nama.Text & "' ") 

     viewatt.DataSource = ds 
     viewatt.DataBind() 

    End Sub 

在此先感謝您的任何幫助,如果之前詢問過此問題,我非常抱歉。

+1

你的問題不是關於ASP和VB。問題是關於你的SQL數據庫語法! – 2012-07-12 14:06:42

+0

請在你實現任何這樣的任何地方之前,研究「SQL注入」。這樣簡單的代碼是很容易被利用的。 http://xkcd.com/327/ – 2012-07-12 14:10:47

回答

2

正如其他人已經指出

select * from student where Nama_Depan like '%" & nama.Text & "%' 

是正確的使用方法通配符

這裏是W3Schools的教程鏈接SQL通配符:http://www.w3schools.com/sql/sql_wildcards.asp 我建議你快速閱讀,W3schools的文章通常非常好。

但是,從代碼執行SQL命令的方式非常糟糕,有人可能很容易將一些SQL代碼插入到文本框中,並且執行查詢時可能會破壞數據庫。

作爲一個例子,如果有人在您的文本框中輸入'; DROP TABLE * --,這將允許您的第一個查詢運行,那麼它會刪除所有的表。

通過使用參數化查詢或存儲過程很容易解決這個問題。我個人喜歡使用存儲過程,你可以這樣做。

CREATE PROCEDURE MyProc 
(
    @param1 VARCHAR(50) 
) 
AS 
BEGIN 
    select * from student where Nama_Depan like '%"'[email protected]+'%' 
END 

然後你只需要編輯你的VB代碼來調用存儲過程而不是執行SQL命令。

使用存儲過程的另一個優點是它們的執行速度稍快並且效率更高,這是因爲當你將一些SQL傳遞給數據庫時,它必須將它編譯成一個sql命令來執行,存儲過程已經存在存儲在數據庫中,所以不需要這樣做。

使用存儲過程而不僅僅是傳輸SQL語句還有一些額外的安全性好處。如果有人在跨網絡/互聯網的方式上攔截SQL語句,他們可以深入瞭解數據庫結構。使用存儲過程,他們可能截取的所有內容都是過程名稱和一些參數。

0

試試這個。

Protected Sub search() 
    Dim ds As New DataSet 
    Dim cls As New Class1 

    ds = cls.returndataset("select * from student where Nama_Depan like '%" & nama.Text & "%' ") 

    viewatt.DataSource = ds 
    viewatt.DataBind() 

End Sub