【发布时间】: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 中的刻度问题和问题
标签: vb.net visual-studio-2010 ms-access-2007