我已检查过本网站上的大多数论坛,但我没有得到我的解决方案。 我的问题是将数据从vb.net插入MS Access,但我无法做到。 它没有显示任何错误,但也没有在我的表中插入值。 我使用非常简单的代码:
Imports System.Data.OleDb
Public Class Add_LEads
Dim conn As New OleDbConnection
Dim cmd As New OleDbCommand
Dim da As New OleDbDataAdapter
Private Sub Add_LEads_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\IndGlobalDB.accdb;Persist Security Info=True;Jet OLEDB:Database Password=admin")
lblDate.Text = Format(Date.Now, "yyyy/MM/dd")
conn.Open()
Dim sql As String
Dim a As Integer
sql = "select S_No from Leadss"
cmd = New OleDbCommand(sql, conn)
Dim dr As OleDbDataReader
dr = cmd.ExecuteReader
While dr.Read
a = dr(0)
End While
lblNo.Text = a + 1
conn.Close()
End Sub
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
conn.Open()
cmd.Connection = conn
cmd.CommandText = "INSERT INTO Leadss(S_No,Contact_Person,Mobile_No,Email_Id,Description,First_Follow_Up,Remarks,L_Date,Alternate_no)VALUES('" & lblNo.Text & "','" & txtName.Text & "','" & txtMobile.Text & "','" & txtEmail.Text & "','" & txtWebDescr.Text & "','" & txtFollowUp.Text & "','" & txtRemarks.Text & "','" & lblDate.Text & "','" & txtAlternate.Text & "')"
cmd.ExecuteNonQuery()
conn.Close()
MsgBox("Saved!!!", vbOK)
End Sub
Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
Me.Close()
Welcome.Show()
End Sub
End Class
答案 0 :(得分:1)
您应该使用参数化查询来避免Sql注入攻击,并让JET引擎解析无效字符的字符串参数。
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnSave.Click
conn.Open()
cmd.Connection = conn
cmd.CommandText = "INSERT INTO Leadss(S_No,Contact_Person,Mobile_No,Email_Id," & _
"Description,First_Follow_Up,Remarks,L_Date,Alternate_no) VALUES " & _
"(?, ?, ?, ?, ?, ?, ?, ?, ?)"
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@p1", lblNo.Text)
cmd.Parameters.AddWithValue("@p2", txtName.Text)
cmd.Parameters.AddWithValue("@p3", txtMobile.Text)
cmd.Parameters.AddWithValue("@p4", txtEmail.Text)
cmd.Parameters.AddWithValue("@p5", txtWebDescr.Text)
cmd.Parameters.AddWithValue("@p6", txtFollowUp.Text)
cmd.Parameters.AddWithValue("@p7", txtRemarks.Text)
cmd.Parameters.AddWithValue("@p8", lblDate.Text)
cmd.Parameters.AddWithValue("@p9", txtAlternate.Text)
cmd.ExecuteNonQuery()
conn.Close()
End Sub
说,这只适用于你的字段类型是文本类型而不是数字或日期时间或布尔值,在这种情况下你应该使用Convert.ToXXXXX方法转换相应类型的输入文本。
(以下示例假定您的输入包含有效数字和日期)
....
cmd.Parameters.AddWithValue("@p3", Convert.ToInt32(txtMobile.Text))
.....
cmd.Parameters.AddWithValue("@p8", Convert.ToDateTime(lblDate.Text))
cmd.Parameters.AddWithValue("@p9", Convert.ToInt32(txtAlternate.Text))
另一种错误的方法是保持全局变量的重用,如OleDbConnection,OleDbCommand。 这可以防止运行时在不使用时处置这些对象。相反,你应该遵循这种方法
Using conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data " +
"Source=|DataDirectory|\IndGlobalDB.accdb;" +
"Persist Security Info=True;Jet OLEDB:Database Password=admin")
Using cmd = New OleDbCommand()
conn.Open()
cmd.Connection = conn
cmd.CommandText = "INSERT INTO ................"
cmd.Parameters.AddWithValue("@p1", lblNo.Text)
..........
End Using
End Using
答案 1 :(得分:0)
以下是使用SqlParameter和try / catch块的简单示例:
Dim connection As SqlConnection = As New SqlConnection("YourDbConnection")
Dim command As SqlCommand = connection.CreateCommand()
Try
connection.Open()
command.CommandText = "INSERT INTO Leadss(S_No) VALUES (@S_No)"
command.Parameters.Add("@S_No", SqlDbType.Text)
command.Parameters["@FirstName"].Value = lblNo.Text
command.ExecuteNonQuery()
Catch Ex As SqlException
'Process the exception
Finally
connection.Close()
End Try
答案 2 :(得分:0)
在`
声明中使用反引号(FROM
)。它应该是FROM(`Field1`,`Field2`,...etc) Values('value1', 'value2')
。
答案 3 :(得分:0)
根据您的数据库名称,表格名称,保存按钮的点击事件中的字段名称编写此编码...
Using conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\Users\user\Documents\Visual Studio 2008\Projects\demo for db in access\demo for db in access\DatabaseforDemo.accdb'")
Using cmd = New OleDbCommand()
conn.Open()
cmd.Connection = conn
cmd.CommandText = "INSERT INTO demo1(Name) VALUES('" & TextBox1.Text & "')"
'cmd.Parameters.AddWithValue("@p1", lblNo.Text)
cmd.ExecuteNonQuery()
MsgBox("saved..")
conn.Close()
End Using
End Using
祝你好运......
希望如此,它会帮助你......!
答案 4 :(得分:0)
在你的问题中你说:
它没有显示任何错误,但它没有在我的表中插入值
尝试使用Commit。
SQL中的 COMMIT 语句结束了关系数据库管理系统(RDBMS)中的事务, 使所有更改对其他用户可见 。一般格式是发出BEGIN WORK语句,一个或多个SQL语句,然后发出COMMIT语句。或者,可以发出ROLLBACK语句,该语句撤消自BEGIN WORK发出以来执行的所有工作。 COMMIT语句还将释放可能正在使用的任何现有保存点。 在事务方面,与提交相反的是放弃事务的暂时更改,即回滚。
Try
'Open Connection...
'Insert Statement....
'Notification / Msgbox to confirm successful transaction
Catch ex As Exception
'RollBack Transaction...
'Error Management...
Finally
'Commit...
'Close DB Connection....
End Try
Microsoft Documentation: OleDbTransaction.Commit Method ()
但请记住:只有在插入/更新多个SQL语句时才应使用事务,这些语句对回滚有意义。
以下是Adding transaction management into a form using MS Access 2010
中的示例