回答編集履歴

1

追記

2022/06/24 06:58

投稿

退会済みユーザー
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
+ ```