[英]last_insert_id with multiple threads
我正在用C#編寫一個基本上由兩個線程組成的應用程序。 線程1獲取數據並將其放入數據庫,線程2獲取該數據執行一些附加操作。 我是否會遇到last_insert_id的問題,例如從第二個線程中完成的插入中獲取第一個線程中的插入ID? 我正在使用連接器.net,主要使用MySqlHelper和連接字符串作為參數。
在這種情況下,last_insert_id是否可以安全使用?還是最好重新考慮自己的方法,例如為任務創建兩個單獨的應用程序?
另外,我無法在一個線程中完成所有操作。 每個線程定期運行,並且花費不同的時間來完成。 第一個線程必須能夠在第二個線程執行其操作時插入數據。
基於每個連接,last_insert_id()是可靠的。 如果您的線程共享相同的MySQL連接並執行插入操作,則您要獲取的ID不確定。
如果您沒有運行太多線程,則最好讓各個線程打開它們自己的MySQL連接,然后您可以使用last_insert_id()而不會出現問題。
通過以下面提到的方式編寫代碼,您將獲得真實的結果...
using (SqlConnection con = new SqlConnection("Your Connection String"))
{
using (SqlCommand cmd = new SqlCommand("Your Stored Procedure Name", con))
{
SqlParameter param = new SqlParameter();
param.ParameterName = "Parameter Name";
param.Value = "Value";
param.SqlDbType = SqlDbType.VarChar;
param.Direction = ParameterDirection.Input;
cmd.Parameters.Add(param);
using (IDataReader DR = cmd.ExecuteReader())
{
if (DR.Read())
{
}
}
}
}
創建Proc ABC AS
SET NOCOUNT ON
SET XACT_ABORT ON
Begin Try
Begin Tran
//Insert Statement
Select Scope_Identity()
End Tran
End Try
Begin Catch
Rollback Tran
End Catch
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.