我正在查看 Npgsql 入门示例,但很难理解 using 语句的用法。
var connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
await using var conn = new NpgsqlConnection(connString);
await conn.OpenAsync();
// Insert some data
await using (var cmd = new NpgsqlCommand("INSERT INTO data (some_field) VALUES (@p)", conn))
{
cmd.Parameters.AddWithValue("p", "Hello world");
await cmd.ExecuteNonQueryAsync();
}
Run Code Online (Sandbox Code Playgroud)
为什么要在 conn 变量的声明中添加“using”?
await using var conn = new NpgslConnection(connString);
Run Code Online (Sandbox Code Playgroud)
另外,由于没有大括号,为什么在下一行插入数据时 conn 在使用之前没有被释放?
await using (var cmd = new NpgsqlCommand("INSERT INTO data (some_field) VALUES (@p)", conn))
Run Code Online (Sandbox Code Playgroud)
什么时候会处理掉?
小智 6
使用添加来保证交易后您的连接将关闭
await using var conn = new NpgslConnection(connString);
Run Code Online (Sandbox Code Playgroud)
关于你的最后一个问题。
通过新的 C# 8 using 声明,可以简化带有 using 语句的代码。不再需要大括号。在变量 r 的作用域末尾(这里是方法的末尾),调用 Dispose 方法。在这里,编译器还创建一个 *try/finally 块,以确保在发生错误时调用 Dispose。