我想在vb.net中向表中添加数据。 使用Access,oledb和oledbcmmand。 表中所有列的属性都是一个简短的文本。 我尝试此代码,但我无法插入数据。 我似乎理解我错了oledb。 请指出错误的部分。
Dim HCSDB As New OleDbConnection
HCSDB = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\HCS\HCSDB.mdb")
'Dim sQuery As String
Dim oleCmd As New OleDbCommand
Dim OleTran As OleDbTransaction
Try
HCSDB.Open()
Catch ex As Exception
MsgBox("Open err", MsgBoxStyle.OkOnly)
Exit Sub
End Try
Try
oleCmd.CommandText = "INSERT INTO InfoManage ( SchoolName, BeforeCheck, SendName, SendNum, RecvName, RecvNum, SendTime, SendMsg, UserPass) VALUES (@SchoolName, @BeforeCheck, @SendName, @RecvName, @RecvNum, @SendTime, @SMSCheck, @SendMsg, @UserPass)"
oleCmd.Parameters.AddWithValue("@SchoolName", edtSchoolName.Text)
oleCmd.Parameters.AddWithValue("@BeforeCheck", cBefore)
oleCmd.Parameters.AddWithValue("@SendName", edtSendName.Text)
oleCmd.Parameters.AddWithValue("@SendNum", edtSendTel.Text)
oleCmd.Parameters.AddWithValue("@RecvName", edtRecvName.Text)
oleCmd.Parameters.AddWithValue("@RecvNum", edtRecvTel.Text)
oleCmd.Parameters.AddWithValue("@SendTime", sTime)
oleCmd.Parameters.AddWithValue("@SendMsg", edtMsg.Text)
oleCmd.Parameters.AddWithValue("@UserPass", edtPass.Text)
OleTran = HCSDB.BeginTransaction
oleCmd.Transaction = OleTran
oleCmd.ExecuteNonQuery()
OleTran.Commit()
MsgBox("saved", MsgBoxStyle.OkOnly)
'MsgBox(sQuery)
Catch ex As OleDbException
MsgBox("err", MsgBoxStyle.OkOnly)
End Try
HCSDB.Close()
End If
答案 0 :(得分:0)
您没有将命令与任何地方的连接相关联。如果您实际查看了异常提供的错误消息,那么您会看到它。您需要设置命令对象的Connection
属性,或者将SQL语句和连接传递给构造函数。
此外,对于单个插入使用事务的重点是什么?如果它是出于学习目的那么这是一回事,但是你需要学会在失败时回滚。在这种情况下,没有任何东西可以回滚,证明了交易的无用性。如果稍后的步骤失败,则事务的目的是回滚先前的成功步骤。您的代码中只有一步,因此无需进行交易。