vb.net mysql Last_Insert_ID 导致双数据库条目?

Posted

技术标签:

【中文标题】vb.net mysql Last_Insert_ID 导致双数据库条目?【英文标题】:vb.net mysql Last_Insert_ID causing double DB entry? 【发布时间】:2013-04-24 04:22:30 【问题描述】:

我无法弄清楚为什么每次执行子例程时都会得到一个双 DB 条目。我想我有一个想法,我认为这很简单,但我不知道如何解决它。感谢任何人都可以提供的任何帮助。

这是我的数据源:

<asp:SqlDataSource id="sqlvoted" runat="server" ConnectionString="<%$ ConnectionStrings:Mym6pConnection %>"
ProviderName="mysql.Data.MySqlClient">
</asp:SqlDataSource>

以及子的相关部分:

sqlvoted.InsertParameters.Clear()
sqlvoted.InsertCommand = "INSERT INTO urls (url,likes,mlsid,sitename) VALUES ('" & url & "','" & firstlike.ToString & "','" & newmlsid & "','" & sitename & "');SELECT LAST_INSERT_ID()"
sqlvoted.Insert()

以及事件处理程序:

Protected Sub sqlvoted_Inserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles sqlvoted.Inserted
    Dim cmd As System.Data.Common.DbCommand = e.Command
    urllikeID = cmd.ExecuteScalar
End Sub

我实际上是在运行两次插入吗?一次使用 sqlvoted.insert() 命令,一次使用 cmd.ExecuteScalar?这是我最好的猜测,但我不知道如何将两者合并为一个。

谢谢!

【问题讨论】:

您是否尝试过处置您的 cmd? 【参考方案1】:

是的,你打了两次电话

sqlvoted.Insert() 进行插入。见Insert method on MSDN .ExecuteScalar 也进行 INSERT

【讨论】:

谢谢,gbn。如果你不介意,你能帮我了解如何摆脱其中一个吗?如果我删除 sqlvoted.Insert() 那么我的事件处理程序就过时了。但是,如果我删除 .ExecuteScalar 我不知道如何获取该值。我正在尝试解决这个问题的第 3 天,我感到很沮丧,因为我知道这很简单。谢谢。 将 ExecuteScalar 移至 EventHandler? ExecuteScalar 已经在 EventHandler 中,这就是问题所在。没有 sqlvoted.Insert() 我没有要处理的事件,但没有 ExecuteScalar 我不知道如何获取值。这可要了我的命。

以上是关于vb.net mysql Last_Insert_ID 导致双数据库条目?的主要内容,如果未能解决你的问题,请参考以下文章

在 VB.NET 中为 MySql 和 MSSql 编程

如何将输出参数从 vb.net 传递到 mysql 存储过程?

错误:表插入在 vb.net 和 msacess 中返回错误

Vb.net Mysql 一个数据中的多个查询

VB.Net 应用程序无法连接到本地 MySQL,但我可以从命令连接

在 sql 语法中出现错误,vb.net 中的 mysql update 语句