Visual Basic.Net 2010 Exception 错误含义

Posted

技术标签:

【中文标题】Visual Basic.Net 2010 Exception 错误含义【英文标题】:Visual Basic.Net 2010 Exception Error meaning 【发布时间】:2014-06-10 16:07:23 【问题描述】:

谁能帮我弄清楚这个错误语句的含义。我不断收到这个错误语句:-

索引(从零开始)必须大于或等于零且小于参数列表的大小

下面是我的代码

Imports System.Data.OleDb
Public Class form2


    Dim Mycn As OleDbConnection
    Dim Command As OleDbCommand
    Dim icount As Integer
    Dim SQLstr As String

    Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Try
            Mycn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\lenovo\Documents\Final year stuff\BookStoreDb.mdb;")
            Mycn.Open()

            SQLstr = String.Format("INSERT INTO login VALUES('0','1','2','3','4')", TextBox1.Text, TextBox2.Text)
            Command = New OleDbCommand(SQLstr, Mycn)


            icount = Command.ExecuteNonQuery
            MessageBox.Show(icount)


        Catch ex As Exception
            MessageBox.Show(ex.Message & " - " & ex.Source)
            Mycn.Close()
        End Try
    End Sub



    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        Me.Close()

    End Sub

End Class

【问题讨论】:

您没有在调用 String.Format 时填写所有参数。 String.Format 有 5 个占位符,但只有 2 个值。那个 SQL 对 SQL 注入攻击是开放的,你应该使用参数,这两个问题都会消失。此外,SQL 字符串中的记号 (` ' `) 将所有值强制为字符串,这可能是您想要的,也可能不是您想要的,具体取决于表。 我需要把所有的字段都放在登录表中还是我要插入数据的字段? 如果您只提供一些表值,您需要更改 SQL 以告诉它您希望插入哪些列,然后您可以只提供这些值:"INSERT INTO Login ([User], [Password]) VALUES ('0','1')"。但最大的问题是SQL injection。参数将消除 SQL 中的刻度问题和问题 【参考方案1】:

按照 Plutonix 的建议,只需指定两个字段。

您可以将它与参数结合起来,这样您也可以免受注入攻击。

尝试以下方法:

SQLstr = String.Format("INSERT INTO Login (User, Password) VALUES ('0','1')", TextBox1.Text, TextBox2.Text)
Command = New OleDbCommand(SQLstr, Mycn)

【讨论】:

以上是关于Visual Basic.Net 2010 Exception 错误含义的主要内容,如果未能解决你的问题,请参考以下文章

为啥某些 Microsoft 语言被称为“视觉”? (Visual C#、Visual Basic .NET、Visual C++)

如何使用 visual basic.net express edition 安装 Windows 服务?

用于 xp 平台程序的 visual basic .net 程序正在 Windows 7 上构建

在 Visual Basic .NET 中提取 Zip 文件

Visual Basic .NET 中消息框中的按钮

如何在 Visual Basic .NET 中找到默认音频设备?