为什么我们需要创建、打开和关闭数据库连接来检索多个结果集,但如果检索一个结果集则不需要?
Why do we need to create, open and close db connections to retrieve multiple result sets but not if retrieving one set?
为了检索存储过程返回的不同结果集,我们必须使用:
UsersPhonesDBContext.Database.Initialize(force: false);
DbConnection con = UsersPhonesDBContext.Database.Connection;
var cmd = con.CreateCommand();
cmd.CommandText = "[dbo].[SelectPhones]";
con.Open();
var reader = cmd.ExecuteReader();
Phones phones = ((IObjectContextAdapter)UsersPhonesDBContext)
.ObjectContext
.Translate<Phones>(reader, "Phones", MergeOption.AppendOnly).First();
reader.NextResult();
Users users = ((IObjectContextAdapter)UsersPhonesDBContext)
.ObjectContext
.Translate<Users>(reader, "Users", MergeOption.AppendOnly).First();
但是如果过程返回单个结果集,那么我们可以简单地使用
var phones1 = UsersPhonesDBContext.Database.SqlQuery<Phones>("dbo.InsertPhones @model", sqlParam);
无需创建、打开和关闭数据库连接等
所以我的问题是,为什么我们必须创建并打开连接,如果是多组而不是单组,因为两者都是从数据库访问的。
打开和关闭数据库连接在时间和资源方面都是昂贵的操作。同时,如果连接长时间保持打开状态,可能会导致内存泄漏或安全风险。
所以推荐的做法是只在需要的时候打开数据库连接,达到打开的目的就关闭。
在您分享的示例中,一次发生了多个数据库操作。因此,不是为每个操作单独打开连接,而是只打开一个连接,并在操作完成后关闭。这里连接是手动打开和关闭的。
数据访问层的新方法,例如 EntityFramework 等,在内部完成这项工作。
UsersPhonesDBContext.Database.SqlQuery<Phones>("dbo.InsertPhones @model", sqlParam);
在这行代码中,与数据库的连接是在内部打开和关闭的,我们不用担心。
所以主要的动机是尽量减少连接的打开和关闭操作,一旦打开的目的结束就关闭连接。
为了检索存储过程返回的不同结果集,我们必须使用:
UsersPhonesDBContext.Database.Initialize(force: false);
DbConnection con = UsersPhonesDBContext.Database.Connection;
var cmd = con.CreateCommand();
cmd.CommandText = "[dbo].[SelectPhones]";
con.Open();
var reader = cmd.ExecuteReader();
Phones phones = ((IObjectContextAdapter)UsersPhonesDBContext)
.ObjectContext
.Translate<Phones>(reader, "Phones", MergeOption.AppendOnly).First();
reader.NextResult();
Users users = ((IObjectContextAdapter)UsersPhonesDBContext)
.ObjectContext
.Translate<Users>(reader, "Users", MergeOption.AppendOnly).First();
但是如果过程返回单个结果集,那么我们可以简单地使用
var phones1 = UsersPhonesDBContext.Database.SqlQuery<Phones>("dbo.InsertPhones @model", sqlParam);
无需创建、打开和关闭数据库连接等
所以我的问题是,为什么我们必须创建并打开连接,如果是多组而不是单组,因为两者都是从数据库访问的。
打开和关闭数据库连接在时间和资源方面都是昂贵的操作。同时,如果连接长时间保持打开状态,可能会导致内存泄漏或安全风险。
所以推荐的做法是只在需要的时候打开数据库连接,达到打开的目的就关闭。
在您分享的示例中,一次发生了多个数据库操作。因此,不是为每个操作单独打开连接,而是只打开一个连接,并在操作完成后关闭。这里连接是手动打开和关闭的。
数据访问层的新方法,例如 EntityFramework 等,在内部完成这项工作。
UsersPhonesDBContext.Database.SqlQuery<Phones>("dbo.InsertPhones @model", sqlParam);
在这行代码中,与数据库的连接是在内部打开和关闭的,我们不用担心。
所以主要的动机是尽量减少连接的打开和关闭操作,一旦打开的目的结束就关闭连接。