new*_*bie 1 c# mysql asp.net-mvc
我开发了一个简单的应用程序,它允许用户在本地数据库中输入数据,但最终它会在生产环境中有许多同时连接,其中包括存储在数据中心的数据。
现在我的应用程序可以读取(从两个不同的表)和写入其中一个,但它至少有一个问题:我在用户结束为一名员工提交数据后立即关闭连接,我实际上想要应用程序允许在单个会话中输入其中的许多,因此流程将是:
(1) 。用户进入应用程序 > (2) 。用户保存员工 > (3) 。应用程序会通知用户输入的结果(可能是多个字段的重复值,这些字段会显示错误、成功保存的员工消息等)[在这里我关闭连接] > (4) 。回到(2),如果用户选择,我尝试再次打开它。
编辑:我在关闭连接后立即尝试输入新用户时遇到的错误是
"connection must be valid and open"
我期待一个 Singleton 对象处理这个,但实际上并没有这样做。
private MySQLDataAccess()
{
this.openConnection();
}
private MySqlConnection Connection;
private static MySQLDataAccess instance;
public static MySQLDataAccess GetInstance()
{
if(instance == null)
{
instance = new MySQLDataAccess();
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是...
应用程序结束后,应用程序是否应该立即关闭与数据库的连接?这可能包括一个用户一次节省 50 多名员工。
或者我应该在每次保存用户时关闭连接,然后再次打开它以保存新用户?(这就是我现在正在尝试做的,但我做得不好)
最佳实践是不要为多个“工作单元”保持连接打开(甚至重复使用)。最有效的方法是使用using块:
using(MySqlConnection conn = ...)
{
using(MySqlCommand cmd = ...)
{
// open connection
// execute command
// close connection (optional - the connection will be closed when
// it gets disposed, but it's more explicit this way)
}
}
Run Code Online (Sandbox Code Playgroud)
即使出现异常,连接也会自动关闭。
此外,不要在块内进行任何需要用户输入的重试(例如“您输入了重复的值 - 再试一次”)。如果出现错误,请处理连接,获取新输入,然后创建新连接并重试。