2016-05-26 14 views
1

.FillVB.NET - .Fillコマンド - 未処理の例外

DA.Fill(DS, TABLE)
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 

を使用しようとすると、私は私が取得していますそれらああそう有用なエラーメッセージのいずれかを取得しています:

を未処理一つ以上の必要なパラメータに指定された値がありません:型「System.Data.OleDb.OleDbException」の例外がのSystem.Data.dll

に追加情報を起こりました。

テーブル変数は、私のDBで正しいテーブル名を持っています。

は、誰かが私が行方不明です何で私にいくつかのヒントを与えてくださいことはできますか?ここではコード全体に

+0

正常に動作したのですか? –

+0

ことがOleDbParameter' 'の問題にコード strSEARCH = frmnewcust.txtName.Text –

+0

エラーメッセージの参照では最大高かった申し訳ありません。 'strSEARCH'の値が' null'ではないことを再度確認してください。あなたの投稿コードに基づいて、それは 'null'なので、あなたはそれが悲しいでも、されていないです:) strSEARCHの値がhttp://imgur.com/tCQFq6g – Fabio

答えて

1

を表示する

編集はあなたの問題です:

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

SQLクエリと接続してOleDbDataAdapterを作成します。あなたのクエリ
Dim SQL As String = "SELECT * FROM tblCustDet WHERE CustomerName= ?"使用パラメータ。しかし、OleDbDataAdapterでクエリを実行すると、パラメータが追加されませんでした。最初の「検索」実行パラメータで
を提供し、すべてがどこに `strSEARCH`を移入している

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 
+0

移入され –

+0

ありがとうございました。今すぐデータをテーブルに追加するにはどうすればよいですか? 'DA.update'がスローする' System.InvalidOperationException '型の未処理の例外がSystem.Data.dllで発生しました追加情報:新しい行を含むDataRowコレクションを渡すときに有効なInsertCommandが必要更新情報' ADAPTERを使用する必要がありますか? –

+0

私はエラーメッセージがかなり明確だと思います:_Updateは、新しいrows_でDataRowコレクションを渡すときに有効なInsertCommandを必要とします。しかし、これについて新しい質問(投稿)を作成してください。 – Fabio