Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Возврат SqlDataReader из функции. Проблема

408
15 октября 2008 года
Lei fang
265 / / 01.10.2005
Здравствуйте. Получилась у меня такая вещь. Одна функция возвращает делает запрос в БД и возвращает объект типа SqlDataReader:
 
Код:
public System.Data.SqlClient.SqlDataReader ExecuteQuery(string QueryString, params object[] args)
        {
            return (System.Data.SqlClient.SqlDataReader)GetQueryResult(System.String.Format(QueryString, args), 1);
        }

Проблема в том, что когда я пытаюсь использовать эту функцию, компилятор пишет что я пытаюсь вызвать тот или иной метод, когда дата ридер закрыт.
 
Код:
public bool IsExistingMember(string login, string password)
        {
            if (tdb.ExecuteQuery("SELECT * FROM accounts WHERE login = '{0}' AND password = '{1}'", login, password).HasRows)
                return true;
            else
                return false;
        }

Вопросы соответственно:
1. Нужно смириться с фактом что возвращать объекты типа SqlDataReader нельзя и далать иначе?
2. Можно ли сделать чтобы дата ридер был открыт после возвращения?
3. Можно ли открыть возвращенный дата ридер самому?
Всем спасибо


P. S. Тоже может пригодиться:
Код:
private System.Object GetQueryResult(string QueryString, int ConnectionType)
        {
            /*int i = 0;
            System.Object ret = null;

            for (;;)
            {
                i = counter % CONNECTION_COUNT;

                if (!ConnectionLocked)
                {
                    ConnectionLocked = true;
                    TargetConnections.Open();

                    System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(QueryString, TargetConnections);
                    if (ConnectionType == 1) //select
                        ret = com.ExecuteReader();
                    else if (ConnectionType > 1) //update, delete
                        ret = com.ExecuteNonQuery();

                    TargetConnections.Close();
                    ConnectionLocked = false;
                    return ret;
                }

                counter++;
            }*/

            System.Object ret = null;
            System.Data.SqlClient.SqlCommand com = new System.Data.SqlClient.SqlCommand(QueryString, TargetConnection);
            TargetConnection.Open();
            if (ConnectionType == 1) //select
                ret = com.ExecuteReader();
            else if (ConnectionType > 1) //update, delete
                ret = com.ExecuteNonQuery();
            TargetConnection.Close();
            return ret;
        }


P. S. 2
Разобрался в чем дело. Если соединение с БД закрывается, то дата ридер использовать нельзя *CRAZY*. Удалил бы эту тему, если бы тут можно было свои темы удалять
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог