我在MVC asp.net中创建登录和注册页面,但问题是,为了每个目的,我必须做所有SQl连接,命令,尝试打开等,这真的让它变慢所以我想知道如果我能得到一次又一次地摆脱创建ti,只需创建一次sqlconnection事件并一次又一次地调用它来登录,注册等
namespace LoginSys.Models
{
public class database
{
public ConnectionStatus connectDB(String name, String email, String pwd, String conStr)
{
// var con = conStr;
SqlConnection sqlCon = new SqlConnection(conStr);
SqlCommand sqlCom = new SqlCommand();
sqlCom.Connection = sqlCon;
sqlCom.CommandText = "insert into tblRegister (userName, userEmail, userPwd) values (@name, @email, @pwd)";
sqlCom.Parameters.AddWithValue("@name", name);
sqlCom.Parameters.AddWithValue("@email", email);
sqlCom.Parameters.AddWithValue("@pwd", pwd);
ConnectionStatus connectStatus = new ConnectionStatus();
int row_aff;
try
{
sqlCon.Open();
row_aff = sqlCom.ExecuteNonQuery();
connectStatus.Message = "OK";
}
catch(Exception ex)
{
connectStatus.Message = ex.Message;
}
finally
{
sqlCon.Close();
}
return connectStatus;
}
}
}
答案 0 :(得分:0)
实际上,您没有创建与数据库的新物理连接。 ADO.NET使用connection pool
。这意味着即使您创建了一个新的SqlConnection实例,您实际上并没有创建新的物理连接,而是从池中绘制一个。此外,当您调用.Close()
方法时,您实际上并未关闭基础连接。您只是将其返回到连接池,以便可以重复使用。
因此,你的代码不会很慢。
我建议您使用此代码的唯一改进是将IDisposable
对象包装在using
语句中:
public ConnectionStatus ConnectDB(string name, string email, string pwd, string conStr)
{
using (SqlConnection sqlCon = new SqlConnection(conStr))
using (SqlCommand sqlCom = sqlCon.CreateCommand())
{
sqlCon.Open();
sqlCom.CommandText = "insert into tblRegister (userName, userEmail, userPwd) values (@name, @email, @pwd)";
sqlCom.Parameters.AddWithValue("@name", name);
sqlCom.Parameters.AddWithValue("@email", email);
sqlCom.Parameters.AddWithValue("@pwd", pwd);
ConnectionStatus connectStatus = new ConnectionStatus();
try
{
sqlCom.ExecuteNonQuery();
connectStatus.Message = "OK";
}
catch(Exception ex)
{
connectStatus.Message = ex.Message;
}
return connectStatus;
}
}