Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 错误[07002][Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期1_Vb.net_Odbc_Ms Access 2010 - Fatal编程技术网

Vb.net 错误[07002][Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期1

Vb.net 错误[07002][Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期1,vb.net,odbc,ms-access-2010,Vb.net,Odbc,Ms Access 2010,这让我发疯,我希望有人能帮助我。我正在使用Visual Studio Express 2012,并正在用VB制作一个Windows窗体应用程序,以访问MS access 2010数据库中的数据。这是使用ODBC Microsoft Access驱动程序完成的。我最初将所有SELECT、UPDATE和INSERT语句构建为字符串。我返回并将其更改为基于参数的命令,以处理特殊字符并消除数据库插入威胁。除一个查询外,所有查询都可以正常工作 下面是给我带来问题的代码: Dim cmdSQLQuery A

这让我发疯,我希望有人能帮助我。我正在使用Visual Studio Express 2012,并正在用VB制作一个Windows窗体应用程序,以访问MS access 2010数据库中的数据。这是使用ODBC Microsoft Access驱动程序完成的。我最初将所有SELECT、UPDATE和INSERT语句构建为字符串。我返回并将其更改为基于参数的命令,以处理特殊字符并消除数据库插入威胁。除一个查询外,所有查询都可以正常工作

下面是给我带来问题的代码:

Dim cmdSQLQuery As Odbc.OdbcCommand
cmdSQLQuery = SCCResources.dbConnSCCResources.CreateCommand

cmdSQLQuery.CommandText = "SELECT tblRepairRequests.ID as [Repair Request ID #], tblRepairRequests.RequestType as [Request Type], tblRepairRequests.PositionLocation as [Position #], tblRepairRequests.DateTimeSubmitted as [Date/Time Submitted], tblRepairRequests.DateTimeClosed as [Date/Time Closed], tblRepairRequests.Status, tblRepairRequests.SubmitterFirstName as [Submitter's First Name], tblRepairRequests.SubmitterLastName as [Submitter's Last Name], tblRepairRequests.SubmitterIDNumber as [Submitter's ID #], tblRepairRequests.SupervisorFirstName as [Supervisor First Name], tblRepairRequests.SupervisorLastName as [Supervisor Last Name], tblRepairRequests.SupervisorIDNumber as [Supervisor ID #], tblRepairRequests.ProblemDescription as [Problem Description], tblRepairRequests.DuplicateParent, tblRepairRequests.DuplicateChild, tblRepairRequests.Reopened FROM tblRepairRequests WHERE tblRepairRequests.ID = ?; "
cmdSQLQuery.Parameters.Clear()
cmdSQLQuery.Parameters.AddWithValue("ID", ID.Text)
cmdSQLQuery.CommandType = CommandType.Text

Dim daSearchResults As New System.Data.Odbc.OdbcDataAdapter(cmdSQLQuery)
Dim dsSearchResults As New System.Data.DataSet
Dim dvSearchResults As New System.Data.DataView

daSearchResults.Fill(dsSearchResults)
dvSearchResults = dsSearchResults.Tables(0).DefaultView

With dgvSearchResults
    .DataSource = dvSearchResults
        .Columns("Status").Visible = True
        .Columns("DuplicateParent").Visible = False
        .Columns("DuplicateChild").Visible = False
        .Columns("Reopened").Visible = False
        .Columns("Repair Request ID #").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Request Type").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Status").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Submitter's First Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Submitter's Last Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Submitter's ID #").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Date/Time Submitted").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Date/Time Submitted").DefaultCellStyle.Format = "MM/dd/yyyy HH:mm:ss"
        .Columns("Supervisor First Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Supervisor Last Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Supervisor ID #").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Position #").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Problem Description").Width = 300
        .Columns("Date/Time Closed").AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
        .Columns("Date/Time Closed").DefaultCellStyle.Format = "MM/dd/yyyy HH:mm:ss"
        .ReadOnly = True
        .Visible = True
End With
在DASAARCHRESULTS.FilldsSearchResults行中,我得到以下错误:错误[07002][Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期1。 我知道命名参数不完全受支持,换句话说,可以按任何顺序添加。我使用它们是为了便于阅读,并且我以正确的顺序添加它们。我在命令上的手表显示了那里的参数。如果我使用以下字符串查询,它可以正常工作:

strSQLQuery = "SELECT DISTINCT tblRepairRequests.ID as [Repair Request ID #], tblRepairRequests.RequestType as [Request Type], tblRepairRequests.PositionLocation as [Position #], tblRepairRequests.DateTimeSubmitted as [Date/Time Submitted], tblRepairRequests.DateTimeClosed as [Date/Time Closed], tblRepairRequests.Status, tblRepairRequests.SubmitterFirstName as [Submitter's First Name], tblRepairRequests.SubmitterLastName as [Submitter's Last Name], tblRepairRequests.SubmitterIDNumber as [Submitter's ID #], tblRepairRequests.SupervisorFirstName as [Supervisor First Name], tblRepairRequests.SupervisorLastName as [Supervisor Last Name], tblRepairRequests.SupervisorIDNumber as [Supervisor ID #], tblRepairRequests.ProblemDescription as [Problem Description], tblRepairRequests.DuplicateParent, tblRepairRequests.DuplicateChild, tblRepairRequests.Reopened FROM tblRepairRequests WHERE tblRepairRequests.ID = 3;"
我不知道哪里出了问题,尤其是因为在同一数据库的同一程序中,类似的代码在另一个窗体上工作:

    If SCCResources.CheckDBConnStateOpen(1) Then
                Dim cmdSubmitRepairRequest As Odbc.OdbcCommand
                cmdSubmitRepairRequest = SCCResources.dbConnSCCResources.CreateCommand
                With cmdSubmitRepairRequest

                    .CommandText = "INSERT INTO tblRepairRequests([RequestType], [SubmitterFirstName], [SubmitterLastName], [SubmitterIDNumber], [DateTimeSubmitted], [SupervisorFirstName], [SupervisorLastName], [SupervisorIDNumber], [PositionLocation], [ProblemDescription], [Status], [DuplicateParent], [DuplicateChild], [Reopened]) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
                    .Parameters.Clear()
                    .Parameters.AddWithValue("RequestType", cbRequestType.SelectedValue)
                    .Parameters.AddWithValue("SubmitterFirstName", dtReportingUserList.Rows(cbPersonReporting.SelectedIndex).Item("FirstName"))
                    .Parameters.AddWithValue("SubmitterLastName", dtReportingUserList.Rows(cbPersonReporting.SelectedIndex).Item("LastName"))
                    .Parameters.AddWithValue("SubmitterIDNumber", dtReportingUserList.Rows(cbPersonReporting.SelectedIndex).Item("SheriffID"))
                    .Parameters.AddWithValue("DateTimeSubmitted", Today.ToString("MM/dd/yyyy") & " " & TimeOfDay.ToString("HH:mm:ss"))
                    .Parameters.AddWithValue("SupervisorFirstName", dtSupervisorContactedList.Rows(cbSupervisorContacted.SelectedIndex).Item("FirstName"))
                    .Parameters.AddWithValue("SupervisorLastName", dtSupervisorContactedList.Rows(cbSupervisorContacted.SelectedIndex).Item("LastName"))
                    .Parameters.AddWithValue("SupervisorIDNumber", dtSupervisorContactedList.Rows(cbSupervisorContacted.SelectedIndex).Item("SheriffID"))
                    If cbPositionLocation.SelectedValue = "" Then
                        .Parameters.AddWithValue("PositionLocation", "")
                    Else
                        .Parameters.AddWithValue("PositionLocation", cbPositionLocation.SelectedValue)
                    End If
                    .Parameters.AddWithValue("ProblemDescription", tbProblemDescription.Text)
                    .Parameters.AddWithValue("Status", "Open")
                    .Parameters.AddWithValue("DuplicateParent", False)
                    .Parameters.AddWithValue("DuplicateChild", False)
                    .Parameters.AddWithValue("Reopened", False)

                    .CommandType = CommandType.Text
                    .ExecuteNonQuery()

                    .CommandText = "SELECT @@Identity"
                    MessageBox.Show("The repair request has been submitted.  The request number is: " & cmdSubmitRepairRequest.ExecuteScalar(), "Repair Request Submitted", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End With
End If

我已尝试为参数使用不同的名称,但没有更改。除了使用基于字符串的查询,我似乎什么都做不了。非常令人沮丧,尤其是因为类似的代码在我的程序中工作。感谢您的帮助。谢谢。

用3替换ID.Text时会发生什么情况?我已经尝试过了,同样的情况也会发生。我尝试将3同时作为字符串和整数…相同的错误。因此,有效和无效的唯一区别是将ID.Text的值添加为参数与将3添加为参数值?不。它根本不作为参数。使用ID.Text作为参数值或硬编码参数值没有区别。我能让它工作的唯一方法是将查询构建为字符串,而不是使用参数,并且可以使用ID.Text或硬编码值。为了排除故障,您可以尝试像这样添加参数,假设它是整数:cmdSQLQuery.parameters.AddID,OdbcType.Int.value=integer.ParseID.Text