Skip to content

Commit 938a2a9

Browse files
authored
update example cover basic crud (#25)
1 parent 8a061f4 commit 938a2a9

File tree

1 file changed

+117
-11
lines changed

1 file changed

+117
-11
lines changed

example/GetStarted/Program.cs

Lines changed: 117 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
var connString = Environment.GetEnvironmentVariable("GaussdbConnString");
77
ArgumentNullException.ThrowIfNull(connString);
8-
8+
// ReSharper disable AccessToDisposedClosure
9+
// Dispose will be handled
910
await using var conn = new GaussDBConnection(connString);
1011
if (conn.State is ConnectionState.Closed)
1112
{
@@ -14,34 +15,139 @@
1415

1516
Console.WriteLine($@"Connection state: {conn.State}");
1617

18+
await ConnectionTest();
19+
20+
var tableName = "employees";
21+
// id int, name varchar(128), age int
1722
{
18-
await TestScalar();
19-
await TestReader();
23+
await ExecuteTableScript(async () =>
24+
{
25+
// insert
26+
{
27+
var insertSql = $"""
28+
INSERT INTO {tableName} (id, name, age) VALUES
29+
(1, 'John', 30),
30+
(2, 'Alice', 16),
31+
(3, 'Mike', 24)
32+
""";
33+
await using var cmd = new GaussDBCommand(insertSql, conn);
34+
await cmd.ExecuteNonQueryAsync();
35+
Console.WriteLine(@"insert script executed");
36+
}
37+
38+
// query
39+
{
40+
await QueryTest();
41+
}
42+
43+
// update
44+
{
45+
var updateSql = $"""
46+
UPDATE {tableName}
47+
SET age = 18
48+
WHERE name = @name
49+
""";
50+
await using var cmd = new GaussDBCommand(updateSql, conn);
51+
cmd.Parameters.AddWithValue("name", "Alice");
52+
await cmd.ExecuteNonQueryAsync();
53+
Console.WriteLine(@"update script executed");
54+
}
55+
56+
// query
57+
{
58+
await QueryTest("age >= 18");
59+
}
60+
61+
// delete
62+
{
63+
var deleteSql = $"""
64+
DELETE FROM {tableName}
65+
WHERE age > @age
66+
""";
67+
await using var cmd = new GaussDBCommand(deleteSql, conn);
68+
cmd.Parameters.AddWithValue("age", 10);
69+
await cmd.ExecuteNonQueryAsync();
70+
Console.WriteLine(@"delete script executed");
71+
}
72+
73+
// query count
74+
{
75+
var queryCountSql = $"SELECT COUNT(*) FROM {tableName}";
76+
await using var cmd = new GaussDBCommand(queryCountSql, conn);
77+
var result = await cmd.ExecuteScalarAsync();
78+
var count = Convert.ToInt32(result);
79+
Console.WriteLine($@"count: {count}");
80+
}
81+
});
2082
}
2183

2284
Console.WriteLine(@"Completed!");
2385

2486

25-
async Task TestScalar()
87+
async Task ConnectionTest()
2688
{
2789
await using var cmd = new GaussDBCommand("SELECT 1", conn);
2890
var result = await cmd.ExecuteScalarAsync();
2991
Console.WriteLine(result);
3092
}
3193

32-
async Task TestReader()
94+
async Task ExecuteTableScript(Func<Task> func)
3395
{
34-
await using (var cmd = new GaussDBCommand("SELECT * FROM employees", conn))
96+
var createTableSql = $"""
97+
DROP TABLE IF EXISTS {tableName} CASCADE;
98+
CREATE TABLE {tableName}
99+
(
100+
id INT PRIMARY KEY,
101+
name VARCHAR(128),
102+
age INT
103+
);
104+
""";
105+
var dropTableSql = $"DROP TABLE IF EXISTS {tableName} CASCADE;";
106+
107+
try
108+
{
109+
await using var createTableCommand = new GaussDBCommand(createTableSql, conn);
110+
await createTableCommand.ExecuteNonQueryAsync();
111+
112+
await func();
113+
}
114+
catch (Exception ex)
115+
{
116+
Console.WriteLine(ex);
117+
}
118+
finally
119+
{
120+
try
121+
{
122+
await using var dropTableCommand = new GaussDBCommand(dropTableSql, conn);
123+
await dropTableCommand.ExecuteNonQueryAsync();
124+
}
125+
catch (Exception e)
126+
{
127+
Console.WriteLine($@"Exception when drop table {tableName} {e}");
128+
}
129+
}
130+
131+
}
132+
133+
async Task QueryTest(string? condition = null)
134+
{
135+
var sql = $"SELECT * FROM {tableName}";
136+
if (!string.IsNullOrEmpty(condition))
137+
{
138+
sql += $" WHERE {condition}";
139+
}
140+
Console.WriteLine($@"Executing query {sql}");
141+
await using (var cmd = new GaussDBCommand(sql, conn))
35142
{
36143
await using var reader = await cmd.ExecuteReaderAsync();
37144
while (await reader.ReadAsync())
38145
{
39-
// 读取每一行数据
40-
var id = reader.GetInt32(0); // 假设第一列是ID,类型为int
41-
var name = reader.GetString(1); // 假设第二列是Name,类型为varchar
42-
var age = reader.GetInt32(2); // 假设第三列是Age,可为空
146+
var id = reader.GetInt32("id");
147+
var name = reader.GetString("name");
148+
var age = reader.GetInt32("age");
43149

44-
Console.WriteLine($"ID: {id}, Name: {name}, Age: {age}");
150+
Console.WriteLine($@"ID: {id}, Name: {name}, Age: {age}");
45151
}
46152
}
47153
}

0 commit comments

Comments
 (0)