创建一次sql连接对象并多次使用它

时间:2013-12-30 05:36:17

标签: asp.net asp.net-mvc c#-4.0

我在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;


        }

    }
}

1 个答案:

答案 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;
    }
}