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

提前感谢您的帮助,如果之前有人问过这个问题,我真的很抱歉。

4

2 回答 2

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 '%"'+@param1+'%'
END

然后您只需要编辑您的 VB 代码来调用存储过程而不是执行 SQL 命令。

使用存储过程的另一个优点是它们执行速度稍快且效率更高,这是因为当您将一些 SQL 传递给数据库时,它必须将其编译成 sql 命令才能执行,存储过程已经存储在数据库中所以不需要这样做。

使用存储过程而不只是传输 SQL 语句还有一些额外的安全优势,如果有人在网络/互联网上截获您的 SQL 语句,他们可以深入了解您的数据库结构。对于存储过程,他们可能拦截的只是过程名称和一些参数。

于 2012-07-12T15:26:56.067 回答
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
于 2012-07-12T14:07:31.760 回答