回答編集履歴
1
追記
test
CHANGED
@@ -13,3 +13,45 @@
|
|
13
13
|
http://surferonwww.info/BlogEngine/post/2020/12/27/task-parallel-library.aspx
|
14
14
|
|
15
15
|
上の記事に書いたような TPL をなどを使ってマルチ CPU/コアを使って「③ マルチ CPU によるマルチスレッド(並列)」のような形にできれば多少の効果はあるかもしれませんが、ボトルネックは多分接続プールか毎回の SQL 文のコンパイルでしょうから効果はなさそうな気がします。
|
16
|
+
|
17
|
+
**【追記】**
|
18
|
+
|
19
|
+
下のコメント欄の 2022/06/24 15:49 の私のコメントで、
|
20
|
+
|
21
|
+
> SQL 文をパラメータ化し(質問のコードでも既にそうなっていると理解)、接続したらパラメータを差し替えながら複数の SQL 文を実行していくという感じです。後で回答欄に例を追記しておきます。
|
22
|
+
|
23
|
+
と書いた件です。SQL Server で SQL 文は UPDATE ですが、一回の接続で 3 回 UPDATE を実行しています。複数の SQL 文を実行するのでトランザクションに束ねていますが、それはこの追記の本題の「一回の接続で複数の SQL を実行」とは関係ないです。
|
24
|
+
|
25
|
+
|
26
|
+
```
|
27
|
+
string query = "UPDATE [TestDatabase].[dbo].[TestResult] " +
|
28
|
+
"SET [StudentID]=@StudentID " +
|
29
|
+
"WHERE [TestResultID]=@TestResultID";
|
30
|
+
using (var connection = new SqlConnection(connString))
|
31
|
+
{
|
32
|
+
using (var command = new SqlCommand(query, connection))
|
33
|
+
{
|
34
|
+
command.Parameters.Add(
|
35
|
+
new SqlParameter("@StudentID", SqlDbType.Int));
|
36
|
+
command.Parameters.Add(
|
37
|
+
new SqlParameter("@TestResultID", SqlDbType.Int));
|
38
|
+
connection.Open();
|
39
|
+
var sqltx = connection.BeginTransaction();
|
40
|
+
command.Transaction = sqltx;
|
41
|
+
|
42
|
+
command.Parameters["@StudentID"].Value = 5;
|
43
|
+
command.Parameters["@TestResultID"].Value = 1;
|
44
|
+
command.ExecuteNonQuery();
|
45
|
+
|
46
|
+
command.Parameters["@StudentID"].Value = 6;
|
47
|
+
command.Parameters["@TestResultID"].Value = 2;
|
48
|
+
command.ExecuteNonQuery();
|
49
|
+
|
50
|
+
command.Parameters["@StudentID"].Value = 4;
|
51
|
+
command.Parameters["@TestResultID"].Value = 3;
|
52
|
+
command.ExecuteNonQuery();
|
53
|
+
|
54
|
+
sqltx.Commit();
|
55
|
+
}
|
56
|
+
}
|
57
|
+
```
|