我有下面列出的示例类,每次调用API时,都需要使用CreateDataConnection()打开数据库连接。
public class FlowerController : ApiController
{
DataConnection oDataConnection { get; set; }
public void CreateDataConnection()
{
ConnectionParameters oParams = new ConnectionParameters();
oParams.strDatabaseName = "123123123123";
oParams.strPassword = "123123123123";
oParams.strSchemaName = "123123123123";
oParams.strServerIP = "192.168.1.1";
oParams.strServerPort = "12313";
oParams.strUsername = "123123123";
oDataConnection = new DataConnection(oParams);
}
[HttpPost]
[AllowAnonymous]
[Route("api/flower/Activate")]
public DBStatus Activate(W_Flower oFlower)
{
CreateDataConnection();
DBStatus result = oDataConnection.Activate(oFlower);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
我想如下实现Activate API
public DBStatus Activate(W_Flower oFlower)
{
using (CreateDataConnection())
{
DBStatus result = oDataConnection.Activate(oFlower);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为我在CreateDataConnection中没有dispose方法。我如何在这里实施处置?我以前没有做过这种方法。
更改CreateDataConnection以返回新创建的连接,
public DataConnection CreateDataConnection() {
ConnectionParameters oParams = new ConnectionParameters();
oParams.strDatabaseName = "123123123123";
oParams.strPassword = "123123123123";
oParams.strSchemaName = "123123123123";
oParams.strServerIP = "192.168.1.1";
oParams.strServerPort = "12313";
oParams.strUsername = "123123123";
return new DataConnection(oParams);
}
Run Code Online (Sandbox Code Playgroud)
而不是将其存储在属性中。
那你就可以做
public DBStatus Activate(W_Flower oFlower) {
using (var connection = CreateDataConnection()) {
return connection.Activate(oFlower);
}
}
Run Code Online (Sandbox Code Playgroud)