将重复的数据行添加到我的访问数据库

时间:2013-01-18 08:14:07

标签: asp.net ms-access

嘿我在向我的数据库添加单行数据时遇到困难我提交表单时将两行数据插入我的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

1 个答案:

答案 0 :(得分:1)

您的代码看起来很好。在我看来,更像是将子例程Button3_Click多次指定为处理程序。例如,在aspx页面中,您有类似

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

查看OnClick属性?连接点击事件以致电Button3_Click 然后在其他地方,可能在.vb代码隐藏中的Page_Load中,你也有:

AddHandler Button3.Click, AddressOf Me.Button3_Click

因此,单击事件将最终调用相同的函数两次。摆脱手动连接点击处理程序所不需要的AddHandler代码,就可以完成。

如果这不是您的问题,您当然可以点击两次按钮,这是一个众所周知的HTML表单问题。 You can Google many solutions。我首选的解决方案是始终首先执行'SELECT'以检查记录是否已经存在,或者将insert命令包装在'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)"

后一种语句仅在'register'中至少有一条记录时才有效,MS Access Jet数据库在语句中需要一个表名see here for more info。但是,严肃地说,删除Access并使用像SQL Server这样的正确数据库,然后你可以直接使用第一个语句,或者通过存储过程使用更专业的解决方案。