2013-01-18 58 views
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 

回答

1

你的代碼看起來不錯。它在我看來更像是不止一次地將子程序Button3_Click指定爲處理程序。例如,在aspx頁面中,您有類似於

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

請參閱OnClick屬性?該線的單擊事件在調用的.vb Button3_Click 然後在其他地方,可能在Page_Load代碼隱藏,你也有:

AddHandler Button3.Click, AddressOf Me.Button3_Click 

因此點擊事件最終會調用同一個功能的兩倍。擺脫AddHandler的代碼,你不需要手動連線點擊處理程序,它是爲你完成的。

如果這不是你的問題,你當然可以點擊兩次按鈕,這是HTML表單的一個衆所周知的問題。 You can Google many solutions。我首選的解決方案是首先做一個'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數據庫要求在聲明中,see here for more info表名的作品。說真的,刪除Access並使用適當的數據庫(如SQL Server),那麼您可以直接使用第一條語句或通過存儲過程使用更專業的解決方案。