[英]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.