ストアド プロシージャを使用して DataTable を埋めるループを含むコードがあります。ストアド プロシージャによって生成される行セットは、呼び出しごとに更新されるカウンターであるため、常に異なります。
ストアド プロシージャへの各呼び出しは、まったく同じパラメーターで行われることに注意してください。
SQL Manager Studio でテストしたところ、問題なく動作しました。.NET 3.5 でも問題なく動作しました。
for (int i = 0; i < total; i++)
{
SqlCommand cmd= new SqlCommand("MyStoredProcedure", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", Convert.ToInt32(Textbox1.Text));
string AlwaysDifferentCounter = "";
MyDatatable.Clear();
MyDatatable = cmd.Fill();
AlwaysDifferentCounter = MyDatatable.Rows[0]["Counter"].ToString();
//AlwaysDifferentCounter value always is the same
}
Framework 4.5 への移行後、同じ行セットでデータテーブルを埋めているため、機能しません。
出力パラメーターからカウンターを取得しようとしましたが、正常に動作しますが、行セットではまだ古くなっています。
AlwaysDifferentCounter = MyDatatable.Parameters["@Counter"].Value.ToString();
//AlwaysDifferentCounter now it has a different value on each call
なぜこうなった?Framework 4.5 にキャッシュ動作はありますか?