0

嘿,当我提交表单时,我在向我的数据库添加单行数据时遇到困难,它将两行数据插入我的 mdb 数据库,任何建议示例或帮助都会起作用,非常感谢

Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
    Dim conCoaxis As OleDbConnection
    Dim strInsert As String
    Dim cmdInsert As OleDbCommand


    conCoaxis = New OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=C:\site\App_Data\sabersolutions.mdb")
    strInsert = "INSERT INTO register (Name, Email, Newsletter) Values (?, ?, ?)"
    cmdInsert = New OleDbCommand(strInsert, conCoaxis)


    cmdInsert.Parameters.Add("@Name", OleDbType.VarWChar, 255).Value = txtName.Text
    cmdInsert.Parameters.Add("@Email", OleDbType.VarWChar, 255).Value = txtEmail.Text
    cmdInsert.Parameters.Add("@Newsletter", OleDbType.Boolean, 1).Value = ckNews.Checked

    Try
        conCoaxis.Open()
        cmdInsert.ExecuteNonQuery()
        conCoaxis.Close()
        Response.Write("Updated Successfully!<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>")
    Catch
        conCoaxis.Close()
    End Try
4

1 回答 1

1

你的代码看起来不错。在我看来,您更像是多次将子例程Button3_Click分配为处理程序。例如,在 aspx 页面中,您有类似

<asp:Button runat="server" ID="Button3" Text="Submit" OnClick="Button3_Click" />

看到 OnClick 属性了吗?将点击事件连接到调用Button3_Click 然后在其他地方,可能在Page_Load.vb 代码隐藏中,您还具有:

AddHandler Button3.Click, AddressOf Me.Button3_Click

所以 ONE click 事件最终会调用相同的函数两次。摆脱AddHandler您不需要手动连接点击处理程序的代码,它已经为您完成了。

如果这不是您的问题,您当然可能会单击您的按钮两次,这是 HTML 表单的一个众所周知的问题。你可以谷歌很多解决方案。我首选的解决方案是始终先执行“SELECT”以检查记录是否已存在,或者将插入命令包装在“IF NOT EXISTS”中(我认为这适用于 MS Access,我知道它适用于 MS Sql Server)

strInsert = "IF NOT EXISTS (SELECT 1 FROM register WHERE Name = @Name AND Email = @Email AND Newsletter = @Newsletter) BEGIN INSERT INTO register (Name, Email, Newsletter) Values ( @Name, @Email, @Newsletter) END"

另一种选择是:

strInsert = "INSERT INTO register (Name, Email, Newsletter) SELECT TOP 1 @Name, @Email, @Newsletter FROM register WHERE NOT EXISTS (SELECT 1 FROM register WHERE Name = @Name AND Email = @Email AND Newsletter = @Newsletter)"

后一种语句仅在“注册”中至少有一条记录时才有效,MS Access Jet 数据库在语句中需要表名,有关更多信息,请参见此处。说真的,放弃 Access 并使用像 SQL Server 这样的适当数据库,然后您可以直接使用第一条语句或通过存储过程使用更专业的解决方案。

于 2013-01-18T08:55:28.853 回答