簡體   English   中英

MySql Last_Insert_Id()的並發問題…(C#)

[英]Concurrency Problem With MySql Last_Insert_Id()… (C#)

我不太確定為什么以下控制台應用程序不會對last_insert_id()產生預期的行為。 我讀過last_insert_id()返回特定連接的最后一個auto_incremented值,但是在這段代碼中,兩個連接都返回相同的結果。 有人可以解釋我哪里出問題了嗎?

    static void Main(string[] args)
    {
        string ConnectionString = "server=XXXX;database=XXXX;username=XXXX;password=XXXX;pooling=true;max pool size=100;min pool size=0";

        MySqlConnection conn1 = new MySqlConnection(ConnectionString);
        MySqlConnection conn2 = new MySqlConnection(ConnectionString);

        MySqlCommand command1 = new MySqlCommand();
        MySqlCommand command2 = new MySqlCommand();

        command1.Connection = conn1;
        command2.Connection = conn1;

        StringBuilder createTableCommandText = new StringBuilder();
        createTableCommandText.Append("Create Table TestTable (");
        createTableCommandText.Append("Id INT NOT NULL AUTO_INCREMENT, ");
        createTableCommandText.Append("str VARCHAR(20) NOT NULL, ");
        createTableCommandText.Append("PRIMARY KEY (Id));");

        StringBuilder insertCommandText = new StringBuilder();
        insertCommandText.Append("INSERT INTO TestTable (str) VALUES ('what is the dilleo?');");

        StringBuilder getLastInsertId = new StringBuilder();
        getLastInsertId.Append("SELECT LAST_INSERT_ID();");

        conn1.Open();
        conn2.Open();

        command1.CommandText = createTableCommandText.ToString();
        command1.ExecuteNonQuery();

        command1.CommandText = insertCommandText.ToString();
        command2.CommandText = insertCommandText.ToString();

        command1.ExecuteNonQuery();
        command2.ExecuteNonQuery();

        command1.CommandText = getLastInsertId.ToString();
        Console.WriteLine("Command 1:  {0}", command1.ExecuteScalar().ToString());
        command2.CommandText = getLastInsertId.ToString();
        Console.WriteLine("Command 2:  {0}", command2.ExecuteScalar().ToString());

        conn1.Close();
        conn2.Close();

        Console.ReadLine();
    }

我知道這不會發生,因為在頂部的連接字符串中存在池,因為我嘗試在不包含字符串的那部分的情況下運行程序,而且我仍然得到相同的結果(即Command 1和Command 2顯示相同的結果last_insert_id()的值。 歡迎任何想法!

非常感謝,

安德魯

看這里:

command1.Connection = conn1;
command2.Connection = conn1;

兩個命令都使用相同的連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM