简体   繁体   English

VB.NET - .Fill 命令 - 未处理的异常

[英]VB.NET - .Fill command - Unhandled Exception

I'm getting one of those oh so helpful error messages when trying to use .Fill尝试使用 .Fill 时,我收到了其中一条非常有用的错误消息

    Public Class SQLSearch
Dim CON As New OleDb.OleDbConnection                'Database Connection object
Dim CONSTR As String                                'Connection String
Dim dbProvider As String                            'Database Provider
Dim dbSource As String                              'Data Source
Dim Database As String                              'DB Name
Dim strSEARCH As String                             'Variable held by txtName.text
' Dim SQL As String                                   'SQL Query
Dim NAME1 As String
Dim STREET1 As String
Dim SUBURB1 As String
Dim PCODE1 As Integer
Dim HOMEPH1 As Integer
Dim MOBPH1 As Integer
Dim EMAIL1 As String

'public CONNECT As New System.Data.SqlClient.SqlConnection(“Integrated Security=SSPI;Initial Catalog=SMART2003.mdb;Data Source=(local);”)

Public Sub AccessCustDetails()
    'Define The Provider
    dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.15.0;"

    'Define Database Name
    Database = "\smart2003.mdb"

    'Define Data Source
    dbSource = "C:\Smart\SMART2003.mdb"

    'Define Connection string - Provider + Data Source
    CON.ConnectionString = "PROVIDER=Microsoft.ACE.OLEDB.15.0; data source = C:\Smart\SMART2003.mdb;"

    'Open Database connection
    CON.Open()

    'Define Search Term
    strSEARCH = frmnewcust.txtName.Text

    'Define SQL string
    'SQL = "Select * From tblcustdet Where customername = " & "'" & strSEARCH & "'"

    MsgBox("1ok")
    MsgBox("The value of strSEARCH is " & strSEARCH)

    Dim CMD As New OleDb.OleDbCommand
    Dim SQL As String = "SELECT * FROM tblCustDet WHERE CustomerName= ?"

    If strSEARCH = "" Then
        MsgBox("Please enter customer's name.", MsgBoxStyle.Exclamation, "Add New Customer")

    Else
        Using CON As New OleDb.OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.15.0; data source = C:\Smart\SMART2003.mdb;")
            CMD = New OleDb.OleDbCommand(SQL, CON)
            CON.Open()
            'MsgBox("Connection to database is " & CON.State)
            CMD.Parameters.AddWithValue("@CustomerName", strSEARCH)
            Dim RESULTS = Convert.ToInt32(CMD.ExecuteScalar)
            'If the Results number is greater than 0 then Customer already exists
            If RESULTS > 0 Then
                MsgBox("Customer name already exists.", MsgBoxStyle.Exclamation, "New Customer Record")

            Else

                MsgBox("2ok")

                NAME1 = My.Forms.frmnewcust.txtName.Text
                STREET1 = My.Forms.frmnewcust.txtStreet.Text
                SUBURB1 = My.Forms.frmnewcust.txtSuburb.Text
                PCODE1 = My.Forms.frmnewcust.txtPCode.Text
                HOMEPH1 = My.Forms.frmnewcust.txtHomePh.Text
                MOBPH1 = My.Forms.frmnewcust.txtMob.Text
                EMAIL1 = My.Forms.frmnewcust.txtEmail.Text

                Dim DS As New DataSet                               'Dataset Object
                Dim DA As OleDb.OleDbDataAdapter                    'Data Adapter Object
                Dim DSNEWROW As DataRow
                Dim TABLE As String

                TABLE = "tblCustDet"

                DA = New OleDb.OleDbDataAdapter(SQL, CON)

                DA.Fill(DS, TABLE)

                Dim COMBUILD As New OleDb.OleDbCommandBuilder(DA)
                DSNEWROW = DS.Tables(TABLE).NewRow

                DS.Tables(TABLE).Rows.Add(DSNEWROW)

                DSNEWROW.Item("CustomerName") = NAME1
                DSNEWROW.Item("STREET") = STREET1
                DSNEWROW.Item("suburb") = SUBURB1
                DSNEWROW.Item("PostCode") = PCODE1
                DSNEWROW.Item("LandlineNumber") = HOMEPH1
                DSNEWROW.Item("MobileNumber") = MOBPH1
                DSNEWROW.Item("EmailAddress") = EMAIL1

                DA.Update(DS, TABLE)

                MsgBox("Customer Added Successfuly.", MsgBoxStyle.OkOnly)

            End If
        End Using
    End If
    CON.Close()
    MsgBox("3ok")
End Sub
End Class

At DA.Fill(DS, TABLE) I am getting:DA.Fill(DS, TABLE)我得到:

An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in System.Data.dll System.Data.dll 中发生类型为“System.Data.OleDb.OleDbException”的未处理异常

Additional information: No value given for one or more required parameters.附加信息:没有为一个或多个必需参数指定值。

The TABLE variable has the correct Table name in my DB. TABLE 变量在我的数据库中具有正确的表名称。

Can someone please give me some hint at what i am missing?有人可以给我一些关于我遗漏的提示吗?

Edited to show whole code编辑以显示整个代码

Here is your problem:这是你的问题:

DA = New OleDb.OleDbDataAdapter(SQL, CON)
DA.Fill(DS, TABLE)

You create OleDbDataAdapter with sql query and connection.您使用 sql 查询和连接创建OleDbDataAdapter Your query您的查询
Dim SQL As String = "SELECT * FROM tblCustDet WHERE CustomerName= ?" use parameter.使用参数。 But when you execute query with OleDbDataAdapter parameter wasn't added.但是当您使用OleDbDataAdapter参数执行查询时,没有添加。
In the first "search" execution parameter was provided and everything works fine在第一个“搜索”执行参数中提供了一切正常

Using command As New OleDbCommand(SQL, CON)
    command.Parameters.AddWithValue("@CustomerName", strSEARCH)
    Using adapter As New OleDbDataAdapter(command)
         adapter.Fill(DS, TABLE)
    End Using
End Using

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM