ストア手順の中で、結果を保存するための一時テーブルを作成します。これは、が1つ以上ある場合に競合しますこのストア手順1接続 name =>どのリクエストにどのリクエストが属しているかを区別する必要はありません)。どのようにC#のMySQLに完全に新しいconnetionを作成するには?
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS TempTable (RowOrdinal INT DEFAULT 0);
INSERT INTO TempTable(RowOrdinal) VALUES (1);
SELECT COUNT(*) FROM TempTable;
END $$
あなたが見ることができるように、同じ接続では、あなたがこの店を呼び出すたびに、TempTableのは1つのより多くの行が追加されます。
私のC#プロジェクトでは、ストアプロシージャを呼び出すための新しいMySQL接続を作成するいくつかの方法をテストします。私は呼んで、それぞれの方法で
public int CallStoreFunction()
{
var result = 0;
using(var connection = new MySqlConnection(connectionString))
{
connection.Open();
var command = new MySqlCommand("CALL store_proc()", connection)
result = int.Parse(command.ExecuteScalar().ToString());
connection.Close();
}
return result;
}
:
、新しいインスタンスを作成して接続を作成します
public int CallStoreFunction() { return result = dbcontext.Database.SqlQuery<int>("CALL store_proc()"); }
を使用して、(エンティティフレームワークでの)新しいdbcontextを作成します。この関数は4回実行され、結局のところ結果は4です(これは、ストアへの各呼び出しが同じ接続内にあることを意味します)
C#のように見えるのは、新しい接続ではなく新しいセッション/トランザクションを作成するだけで、どのアプローチを使用しても問題ありません。私は、このストアにリクエストするたびにDBとの接続を完全に作成する方法ですか? ありがとうございます!
一時テーブルを作成するときは、[CREATE TEMPORARY TABLE '](https://dev.mysql.com/doc/refman/5.7/en/create-temporary-table.html)の構文ですか? EFとADOの両方で接続プーリングが使用されるため、接続が解放された場合(クローズ+ディスポーザルを使用している場合)、同じ接続がプールから返されることがよくあります。 'TEMPORARY'表はセッションごとにする必要があります。したがって、接続プーリングを使用しても一意でなければなりません。 – StuartLC