' 声明一个 DataTable 用于存储查询结果 Dim dt As New DataTable() ' 获取查询条件 Dim keyword As String = TextBox1.Text.Trim() ' 构造查询语句 Dim sql As String = "SELECT * FROM 表名 WHERE 字段名 LIKE '%" & keyword & "%'" ' 创建并打开数据库连接 Using conn As New SqlConnection("连接字符串") conn.Open() ' 创建一个 SqlDataAdapter,并使用查询语句和数据库连接初始化它 Dim adapter As New SqlDataAdapter(sql, conn) ' 将查询结果填充到 DataTable 中 adapter.Fill(dt) End Using ' 将查询结果绑定到 DataGridView 控件中 DataGridView1.DataSource = dt 优化这段代码
时间: 2024-02-10 17:09:05 浏览: 132
SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍
这段代码的主要问题是没有考虑到 SQL 注入攻击,如果用户在 TextBox1 中输入了单引号,就会导致 SQL 查询语句出现语法错误或返回错误的结果。为了避免这种情况,我们应该使用参数化查询。此外,我们还可以使用 Using 语句来自动释放资源,提高代码的可读性和健壮性。优化后的代码如下:
```vb.net
' 获取查询条件
Dim keyword As String = TextBox1.Text.Trim()
' 构造查询语句和参数
Dim sql As String = "SELECT * FROM 表名 WHERE 字段名 LIKE @keyword"
Dim cmd As New SqlCommand(sql)
cmd.Parameters.AddWithValue("@keyword", "%" & keyword & "%")
' 创建并打开数据库连接
Using conn As New SqlConnection("连接字符串")
conn.Open()
cmd.Connection = conn
' 创建一个 SqlDataAdapter,并使用查询语句和数据库连接初始化它
Dim adapter As New SqlDataAdapter(cmd)
' 声明一个 DataTable 用于存储查询结果
Dim dt As New DataTable()
' 将查询结果填充到 DataTable 中
adapter.Fill(dt)
' 将查询结果绑定到 DataGridView 控件中
DataGridView1.DataSource = dt
End Using
```
在优化后的代码中,我们首先获取查询条件,并构造了一个带有参数的查询语句。接着,我们创建了一个 SqlCommand 对象,并将查询语句和参数添加到该对象中。然后,我们使用 Using 语句来自动释放资源,在该语句块中创建并打开了数据库连接,并将 SqlCommand 对象与该连接关联。接下来,我们使用 SqlDataAdapter 对象来填充 DataTable 对象,并将其绑定到 DataGridView 控件中。这样,我们就成功地避免了 SQL 注入攻击,并提高了代码的可读性和健壮性。
阅读全文