首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Microsoft和VB.NET防止SQL注入

使用Microsoft和VB.NET防止SQL注入
EN

Stack Overflow用户
提问于 2013-05-26 13:05:03
回答 1查看 2.9K关注 0票数 6

我是ASP.NET的初学者,所以我有一些关于如何在ASP.NET中防止SQL注入的问题。我的编程语言是VB.NET,而不是C#,我正在使用Microsoft作为我的数据库。

我的问题是:

  1. 如何保护我的数据库免受SQL注入?
  2. 我一直在阅读其他论坛上的帖子,他们说使用存储过程的参数,使用动态SQL的参数。它们能在Microsoft数据库中实现吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-26 15:45:40

下面是一个非常简单的ASP.NET示例,通过OleDb在VB.NET中使用参数化查询:

Default.aspx

代码语言:javascript
运行
复制
<%@ Page Title="Home Page" Language="vb" MasterPageFile="~/Site.Master" AutoEventWireup="false"
    CodeBehind="Default.aspx.vb" Inherits="vbOleDbSite._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <p>
        First Name: <asp:TextBox ID="FirstName" runat="server"></asp:TextBox><br />
        Last Name: <asp:TextBox ID="LastName" runat="server"></asp:TextBox><br />
        &nbsp;<br />
        <asp:Button ID="btnAddUser" runat="server" Text="Add User" />
        &nbsp;<br />
        Status: <span id="spanStatus" runat="server">Awaiting submission...</span>
    </p>
</asp:Content>

Default.aspx.vb

代码语言:javascript
运行
复制
Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Protected Sub btnAddUser_Click(sender As Object, e As EventArgs) Handles btnAddUser.Click
        Dim newID As Long = 0
        Using con As New OleDb.OleDbConnection
            con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\__tmp\testData.accdb;"
            con.Open()
            Using cmd As New OleDb.OleDbCommand
                cmd.Connection = con
                cmd.CommandText = "INSERT INTO UsersTable (LastName, FirstName) VALUES (?, ?);"
                cmd.Parameters.AddWithValue("?", Me.LastName.Text)
                cmd.Parameters.AddWithValue("?", Me.FirstName.Text)
                cmd.ExecuteNonQuery()
            End Using
            Using cmd As New OleDb.OleDbCommand
                cmd.Connection = con
                cmd.CommandText = "SELECT @@IDENTITY"
                newID = cmd.ExecuteScalar()
            End Using
            con.Close()
        End Using
        Me.spanStatus.InnerText = "User """ & Me.FirstName.Text & " " & Me.LastName.Text & _
                """ has been added (ID: " & newID.ToString() & ")."
    End Sub
End Class

备注:

  • 参数化查询使用"?“而不是参数的“实名”,因为Access OLEDB会忽略参数名。参数必须按照它们在OleDbCommand.CommandText中出现的确切顺序定义。
  • UsersTable表有一个AutoNumber主键,SELECT @@IDENTITY检索INSERT INTO语句创建的新键值。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16759516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档