ASP.NET: должно ли соединение быть закрыто сразу после того, как адаптер заполнил набор данных? - PullRequest
3 голосов
/ 12 июня 2011

Я использую GridView и задаюсь вопросом, лучше ли мне закрывать соединение НЕМЕДЛЕННО после

adapter.Fill(ds);

заявление или я должен подождать, пока я не закончу:

GridView.DataSource = ds;
GridView.DataBind();

Полагаю, что после заполнения набора данных мне больше не нужно соединение. Я не прав?

Ответы [ 4 ]

4 голосов
/ 12 июня 2011

Когда вы звоните adapter.Fill(ds);, данные загружаются в память, и вы можете закрыть соединение сразу после этого оператора. После, когда вы установите ds в качестве источника данных для вида сетки, он будет связывать данные из памяти.

Ознакомьтесь с этой статьей для понимания Работа с отключенными данными - DataSet и SqlDataAdapter

3 голосов
/ 12 июня 2011

После звонка на Fill() вы можете безопасно закрыть соединение. Оффтоп: практикуйте использование блока using при работе с IDisposable (например, SqlConnection) объектами, поэтому в этом случае вам не придется вручную вызывать Close().

1 голос
/ 12 июня 2011

SqlDataAdapter не нужно connection после заполнения данных в DataSet, но если вы делаете какие-либо data manipulation после этой строки, вам нужно будет снова открыть ее, я пишу все такие операторыв finally блок.

0 голосов
/ 12 июня 2011

Нет необходимости вообще открывать SqlConnection, поскольку DataSet имеет отключенную архитектуру.

DataSet является основным инструментом хранения данных в отключенной архитектуре ADO.NET.В отличие от DataReader, DataSet не подключается напрямую к базе данных через объект Connection при его заполнении.Вместо этого, чтобы заполнить DataSet из базы данных, вы сначала создаете объект DataAdapter (например, SqlDataAdapter) для провайдера и связываете его с объектом SqlConnection.Затем SqlDataAdapter может выступить посредником извлечения данных для DataSet, выполнив SqlCommand для базы данных через SqlConnection, извлекая данные и заполнив DataSet

. Очень простым примером использования будет

string sSQL = "SELECT * FROM Products";
string sConnString = 
    "Server=(local);Database=Northwind;Integrated Security=SSPI;";
SqlDataAdapter oDa = new SqlDataAdapter();
DataSet oDs = new DataSet();
using(SqlConnection oCn = new SqlConnection(sConnString))
{
    SqlCommand oSelCmd = new SqlCommand(sSQL, oCn);
    oSelCmd.CommandType = CommandType.Text;
    oDa.SelectCommand = oSelCmd;
    oDa.Fill(oDs, "Products");
}

Источник: В отличие от ADO.NET DataReader и DataSet

...