0

我想将数据添加到 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
4

1 回答 1

0

您没有将命令与任何地方的连接相关联。如果您确实查看了异常提供的错误消息,那么您就会看到。您需要设置Connection命令对象的属性,或者将 SQL 语句和连接都传递给构造函数。

另外,对单个插入使用事务有什么意义?如果是出于学习目的,那是一回事,但是您需要学会在失败时回滚。但是在这种情况下没有什么可以回滚的,这证明了事务的无用性。事务的目的是在后面的步骤失败时回滚之前的成功步骤。您的代码中只有一步,因此没有交易的意义。

于 2015-07-09T05:39:15.243 回答