· 6 years ago · Jul 29, 2019, 10:30 PM
1using System;
2using System.Collections.Generic;
3using System.Data.SqlClient;
4using System.Globalization;
5using System.Threading;
6using System.Threading.Tasks;
7
8namespace ConsoleApp9
9{
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 var cb = new SqlConnectionStringBuilder(args[0])
15 {
16 MultipleActiveResultSets = true
17 };
18
19 try
20 {
21 using (var connection = new SqlConnection(cb.ConnectionString))
22 {
23 connection.Open();
24
25 CreateTable(connection);
26 }
27 }
28 catch (SqlException e)
29 {
30 Console.WriteLine(e.ToString());
31 }
32
33 var stop = false;
34 Console.CancelKeyPress += (sender, eventArgs) =>
35 {
36 Console.Out.WriteLine("Stopping....");
37 eventArgs.Cancel = true;
38 stop = true;
39 };
40
41 var rnd = new Random();
42 var connectionOpen = 0;
43
44 var task = Task.Run(() =>
45 {
46 while (!stop)
47 {
48 Console.Out.WriteLine($"Connections open {connectionOpen}");
49 Thread.Sleep(1000);
50 }
51 });
52
53 while (!stop)
54 {
55 var tasks = new List<Task>();
56 for (var i = 0; i < 300; i++)
57 {
58 tasks.Add(Task.Run(() =>
59 {
60 var opened = false;
61 try
62 {
63
64 using (var connection = new SqlConnection(cb.ConnectionString))
65 {
66 connection.Open();
67 Interlocked.Increment(ref connectionOpen);
68 opened = true;
69
70 DoSelect(connection);
71 Thread.Sleep(rnd.Next(10, 500));
72 }
73 }
74 catch (SqlException e)
75 {
76 Console.WriteLine(e.ToString());
77 }
78 finally
79 {
80 if (opened)
81 {
82 Interlocked.Decrement(ref connectionOpen);
83 }
84 }
85 }));
86 }
87
88 Task.WaitAll(tasks.ToArray());
89 }
90
91 task.Wait();
92
93 Console.Out.WriteLine("Done");
94 }
95
96 static void DoSelect(SqlConnection connection)
97 {
98 var tsql = @"SELECT * FROM test;";
99
100 using (var command = new SqlCommand(tsql, connection))
101 {
102 using (SqlDataReader reader = command.ExecuteReader())
103 {
104 while (reader.Read())
105 {
106
107 }
108 }
109 }
110 }
111
112 static void CreateTable(SqlConnection connection)
113 {
114 var tsql = @"
115 DROP TABLE IF EXISTS test;
116 CREATE TABLE test
117 (
118 DepartmentCode nchar(4) not null PRIMARY KEY,
119 DepartmentName nvarchar(128) not null
120 );";
121
122 using (var command = new SqlCommand(tsql, connection))
123 {
124
125 command.ExecuteNonQuery();
126 }
127 }
128 }
129}