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 上构建