簡體   English   中英

vb.net無法將查詢寫入MSAccess文件

[英]vb.net cannot write Query to MSAccess file

我可以訪問本地Access數據庫,也可以使用Query添加一些數據,但是只要程序運行,它就可以顯示其數據。 當我重新執行該程序時,我看不到任何以前添加的數據,原始數據庫文件(SourceDB.mdb)也是如此。

如何保存數據? 這是我的代碼。

Imports System.Data.OleDb

Public Class UserForm
    Private myConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=.\SourceDB.mdb"
    Private mDbConn As OleDbConnection

    Private Sub Button_Search_Click(sender As Object, e As EventArgs) Handles Button_Search.Click

        Dim myAdapter As New OleDbDataAdapter("SELECT * FROM user WHERE u_name = '" +    tBoxName.Text + "'", myConn)
        Dim myDataTable As New DataTable
        If tBoxName.Text = "" Then
            MsgBox("Input name")
        Else
            myAdapter.Fill(myDataTable)
            If myDataTable.Rows.Count > 0 Then
                tBoxPhone.Text = myDataTable.Rows(0).Item("u_phone")
                tBoxAddr.Text = myDataTable.Rows(0).Item("u_addr")
                tBoxBName.Text = myDataTable.Rows(0).Item("u_bname")
                tBoxBAccount.Text = myDataTable.Rows(0).Item("u_baccount")
                tBoxEtc.Text = myDataTable.Rows(0).Item("u_comment")
            Else
                MsgBox("No Name in Table")
            End If
        End If
    End Sub

    Private Sub Button_OK_Click(sender As Object, e As EventArgs) Handles Button_OK.Click
        Try
            If lblAOE.Text = "Add" Then
                Dim myAdapter As New OleDbDataAdapter("INSERT INTO user (u_name, u_phone, u_addr, u_bname, u_baccount, u_comment) VALUES ('" + _
                                                                       tBoxName.Text + "', '" + tBoxPhone.Text + "', '" + tBoxAddr.Text + "', '" + tBoxBName.Text + _
                                                                       "', '" + tBoxBAccount.Text + "', '" + tBoxEtc.Text + "')", myConn)
                Dim myDataTable As New DataTable
                myAdapter.Fill(myDataTable)
                Button_Add.Visible = True
                Button_Modify.Visible = True
                Button_OK.Visible = False
                ClearTextBoxes()
                Button_Clear.Text = "비우기"
            End If        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Private Sub Button_Delete_Click(sender As Object, e As EventArgs) Handles Button_Delete.Click
        If MessageBox.Show("Sure Wanna delete data?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.No Then
            MsgBox("Cancelled")
            Exit Sub
        Else
            Dim myAdapter As New OleDbDataAdapter("DELETE FROM user WHERE u_name = '" + tBoxName.Text + "'", myConn)
            Dim myDataTable As New DataTable
            myAdapter.Fill(myDataTable)
            MsgBox("DELETED")
            ClearTextBoxes()
        End If
    End Sub

    Private Sub ClientForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.UserTableAdapter.Fill(Me.SourceDBDataSet.user)
        Me.Text = "User Form"
    End Sub
End Class

您正在使用OleDbDataAdapter嘗試執行INSERT操作(或DELETE操作),但這不是OleDbDataAdapter工作方式。

OleDbDataAdapter使用SELECT命令來檢索記錄,並且,如果定義了它的InsertCommand屬性,則通過調用OleDbDataAdapter.Update方法來更新數據集的記錄。 您不在這種情況下,您可以直接在文本框中輸入值。 您可以簡單地將OleDbCommand與相應的sql語句一起使用(這與您的DELETE方法相同)

嘗試將您的代碼更改為

Dim cmdText = "INSERT INTO [user] (u_name, u_phone, u_addr, u_bname, " & _ 
              "u_baccount, u_comment) VALUES (?, ?, ?, ?,?,?)"
Dim cmd = New OleDbCommand(cmdText, myConn)
cmd.Parameters.AddWithValue("@p1",tBoxName.Text)
cmd.Parameters.AddWithValue("@p2",tBoxPhone.Text )
cmd.Parameters.AddWithValue("@p3",tBoxAddr.Text)
cmd.Parameters.AddWithValue("@p4",tBoxBName.Text)
cmd.Parameters.AddWithValue("@p5",tBoxBAccount.Text)
cmd.Parameters.AddWithValue("@p6",tBoxEtc.Text )
cms.ExecuteNonQuery()

我已將您的字符串連接更改為更正確的參數化查詢,以避免在文本框值之一包含單引號的情況下進行SQL注入和解析問題。

您使用OleDbCommand類。 您創建類對象,並使用ExecuteNonQuery插入數據,例如

    Dim o As OleDbCommand
    o.Connection = con
    o.CommandType = CommandType.Text
    o.CommandText = "your Query"
    o.ExecuteNonQuery()

你應該使用try塊

嘗試

o.ExecuteNonQuery()

抓住

結束嘗試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM