Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL连接_C#_Sql_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# SQL连接

C# SQL连接,c#,sql,asp.net-mvc,asp.net-mvc-4,C#,Sql,Asp.net Mvc,Asp.net Mvc 4,我正在做一个数据库密集型应用程序,由于我是ASP.NETMVC4C#新手,所以我产生了一些疑问: 1) 打开一个连接并使其对所有请求保持打开状态是否更好?或者为每个请求设置Open()和Close()?(如果第一个选项是最好的,那么何时/何地关闭连接??) 2) 我来自PHP,我习惯于在FrontController(刚开始)上打开一个连接,并在最后关闭它,因此每个请求只打开一个连接,将其用于所需的一切,并在服务HTTP响应之前删除它在ASP.NETMVC4中就是这样吗? 3) 任何代码内性能提

我正在做一个数据库密集型应用程序,由于我是
ASP.NET
MVC4
C#
新手,所以我产生了一些疑问:

1) 打开一个连接并使其对所有请求保持打开状态是否更好?或者为每个请求设置
Open()
Close()
?(如果第一个选项是最好的,那么何时/何地关闭连接??)

2) 我来自PHP,我习惯于在
FrontController
(刚开始)上打开一个连接,并在最后关闭它,因此每个请求只打开一个连接,将其用于所需的一切,并在服务
HTTP
响应之前删除它
ASP.NET
MVC4
中就是这样吗?


3) 任何代码内性能提示都将不胜感激!!:)

您可以看看这个线程,它应该可以帮助您进行
SQL
连接和
关闭/处理连接

using语句中使用SQL连接的代码片段

public void InsertMember(Member member)
{
    string INSERT = "INSERT INTO Members (Name, Surname, EntryDate) VALUES (@Name, @Surname, @EntryDate)";

    using (sqlConnection = new SqlConnection(sqlConnectionString_WORK))
    {
        sqlConnection.Open();

        using (SqlCommand sqlCommand = new SqlCommand(INSERT, sqlConnection))
        {
            sqlCommand.Parameters.Add("@Name", SqlDbType.VarChar).Value = member.Name;
            sqlCommand.Parameters.Add("@Surname", SqlDbType.VarChar).Value = member.Surname;
            sqlCommand.Parameters.Add("@EntryDate", SqlDbType.Date).Value = member.EntryDate;

            sqlCommand.ExecuteNonQuery();
        }
    }
}
这不仅有助于举例说明,也有助于解释概念

希望这有帮助


我认为,在ASP.NET4中,使用实体框架或其他一些ORM,如NHibernate:D


如果您决定使用自己的数据库访问层,则主要取决于应用程序的具体情况。例如,如果你有一个信息量很大的网站,比如一个eshop,那么在一个连接上加载大量信息会加快速度,但是如果你希望有很多用户,那么这种工作方法可能没有足够的连接可用。

MVC
的方法是使用
ORM
,例如或

objectrelationalmapper
将为您处理连接,您的主要目标是通过
DBContext
或某种存储库对象获取信息。使用
ADO.NET
SqlConnection
对象并不是真正的纯MVC,尽管它们仍然可以在应用程序中使用

1)更好的方法是:

为每个请求设置Open()和Close()

在ADO.net中使用连接池时,Close()会将数据库连接返回到连接池(而不是从数据库服务器断开连接),然后可以在下一个请求中使用它

2) 您可以像PHP代码一样进行操作,我的经验是:当数据库连接打开时,尽快关闭/释放它(在数据库中完成查询之后),这有时有助于提高请求的响应时间

3) 不仅是数据库连接,还应尽快关闭/释放那些稀缺资源(文件句柄、tcp连接等)


希望这对您有所帮助。

您研究过C#net中的连接池吗。。?NET与Delphi等语言(例如,
Delphi
)的工作原理有所不同。这里的问题在于性能,因为有些查询需要使用连接执行超过10.000行的搜索(这是一个基于N个限制规则为产品提供每日定价的应用程序)。认为用EntityFramework处理这件事不容易/不可能。我说的对吗?@VicençGascó-使用ORM是可能的。如果您希望获得原始SQL性能,那么可以使用存储过程从执行计划中获得好处,并使用Entity Framework profiler等工具来确定幕后生成的SQL。nHibernate也有自己的评测工具来帮助执行。也就是说,您可以在一次点击中加载所有数据,而不是每次都请求等等。确保我们使用的是存储过程;-)我将更深入地了解EF。