Передача DataReader из метода на страницу .cs - используйте CommandBehavior.CloseConnection, но соединение не закрывается - PullRequest
0 голосов
/ 24 июля 2011

Я использую следующий метод в классе - который я вызываю со страницы .cs, заполняя устройство чтения данных:

public static SqlDataReader getinfo(string username, string url)
{
    //Initialise connection, string stored in Web.config
    SqlConnection conNs = new SqlConnection(ConfigurationManager.ConnectionStrings["conNs"].ConnectionString);
    SqlCommand cmdNs = new SqlCommand("usp_getinfo", conNs);
    cmdNs.CommandType = CommandType.StoredProcedure;

    cmdNs.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar, 50));
    cmdNs.Parameters["@username"].Value = username;
    cmdNs.Parameters.Add(new SqlParameter("@url", SqlDbType.VarChar, 50));
    cmdNs.Parameters["@url"].Value = url;

    //Execute Command
    conNs.Open();
    SqlDataReader dr = cmdNs.ExecuteReader(CommandBehavior.CloseConnection);

    //Return data
    return dr;
}

Уведомление 'commendbehavior.closeconnection'.

Затем в .csСтраница, которую я называю так:

SqlDataReader drInfo = dataAccess.getinfo(username, url);
//do some stuff
drInfo.Close();

Это тоже должно закрывать соединение?

У меня проблема с заполнением аппулы открытыми соединениями.Есть ли проблема с моей техникой?

Скорость - мой приоритет здесь.

Спасибо

Ответы [ 4 ]

0 голосов
/ 24 июля 2011

не похоже, что GetInfo возвращает много данных.Вам лучше не передавать DataReader таким образом.Внутри GetInfo выполните чтение и верните объект, содержащий информацию, вместо того, чтобы возвращать DataReader.Разница в скорости будет несущественной, и вы устраните всю боль, через которую вы проходите.

0 голосов
/ 24 июля 2011

взгляните на этот вопрос. Я думаю, вам нужно закрыть соединение в методе getinfo () ...

как закрыть соединение / устройство чтения данных при использовании SqlDataSource или ObjectDataSource

0 голосов
/ 24 июля 2011

Вы уверены, что соединение не остается открытым в пуле соединений или счет постоянно увеличивается?

0 голосов
/ 24 июля 2011

Я думаю, что вам нужно вернуть datatable вместо SQLDataReader, и вам нужно закрыть соединение сразу после того, как вы закончите чтение из читателя данных.

...