powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема Dataadapter
8 сообщений из 8, страница 1 из 1
Проблема Dataadapter
    #38639392
antihacker777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Вот код.

//***************Возвращаем список ТОП40************
if (context.Request.QueryString["Top40"] != null)
{
//***********Основной код
List<MapsObject> objListMaps = new List<MapsObject>();

context.Response.ContentType = "application/json";

String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["chtogdeDBConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(strConnString);

con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = ("select * from TopObjTBL");

// cmd.Parameters.AddWithValue("@Top40", context.Request.QueryString["Top40"]);

SqlDataReader dataReader = cmd.ExecuteReader();
DataTable dtTop = new DataTable();
SqlDataAdapter topadapter = new SqlDataAdapter();

while (dataReader.Read())
{ //-----ищем в топ таблице по ID----------------------
// SqlCommand cmdObj = new SqlCommand();
//cmd.Connection = con;
// cmdObj.CommandText = ("select * from ObjectTBL where ObjectId=@FromObjID");
// cmdObj.Parameters.AddWithValue("@FromObjID", dataReader["FromObjID"].ToString());

//----вытаскиваем через датаадаптер--------
topadapter.SelectCommand = new SqlCommand("select * from ObjectTBL where ObjectId=@FromObjID", con);

topadapter.SelectCommand.Parameters.Add(new SqlParameter("@FromObjID", SqlDbType.Int, 10));

topadapter.SelectCommand.Parameters["@FromObjID"].Value = dataReader["FromObjID"].ToString();

//----дататабле заполняем датаадаптером----
topadapter.Fill(dtTop);

//-----заполняем JSON----------------------
foreach (DataRow dr in dtTop.Rows)
{
objListMaps.Add(new MapsObject()
{

ObjectID =dr["ObjectId"].ToString(),
ObjImageName =dr["ObjImageName"].ToString(),

});

}
dataReader.Close();
topadapter.Dispose();
dtTop.Dispose();
}

con.Close();

JavaScriptSerializer oSerializer = new JavaScriptSerializer();
string sJSON = oSerializer.Serialize(objListMaps);
context.Response.Write(sJSON);

}

Здесь вызывает ошибку - "Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть."

В чем дело ?
...
Рейтинг: 0 / 0
Проблема Dataadapter
    #38639419
Кавказ-сила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antihacker777
Код: c#
1.
2.
3.
4.
5.
                while (dataReader.Read())
                {  //-----ищем в топ таблице по ID----------------------
                   dataReader.Close();
                }
            
...
Рейтинг: 0 / 0
Проблема Dataadapter
    #38639432
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antihacker777Здесь вызывает ошибку - "Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть."

В чем дело ?В том, что внутри метода Fill Вашего topadapter создаётся свой DataReader для чтения результатов запроса. И это приводит к ошибке.

Извлечение данных с помощью DataReader
Закрытие DataReaderПо окончании использования объекта DataReader всегда следует вызывать метод Close .

Если метод Command содержит выходные параметры или возвращаемые значения, они будут недоступны до закрытия объекта DataReader .

Имейте в виду, что пока объект DataReader открыт, соединение Connection используется исключительно этим объектом DataReader . Невозможно выполнять какие-либо команды для Connection , включая создание другого объекта DataReader , пока исходный объект DataReader не будет закрыт.
P.S.: ну и поиском можно было воспользоваться по тексту ошибки: Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть .
...
Рейтинг: 0 / 0
Проблема Dataadapter
    #38639475
antihacker777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне теперь вместо датардера использовать второй адаатаптер ?
...
Рейтинг: 0 / 0
Проблема Dataadapter
    #38639777
antihacker777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не попмогло. Как быть ?
...
Рейтинг: 0 / 0
Проблема Dataadapter
    #38639863
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antihacker777, тебе нужно открыть друге соединение для DataAdapter'a или добавить параметр MultipleActiveResultSets=true в строку соединения.

Еще лучшим решением использовать один запрос для получения всех данных. Что-то вроде:
Код: sql
1.
2.
3.
select TopObjTBL.FromObjID, ObjectTBL.*
from TopObjTBL
join ObjectTBL on ObjectTBL.ObjectId = TopObjTBL.FromObjID
...
Рейтинг: 0 / 0
Проблема Dataadapter
    #38639866
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antihacker777Мне теперь вместо датардера использовать второй адаатаптер ?Напишите один запрос, где будет JOIN двух таблиц TopObjTBL и ObjectTBL и используйте один DataReader.
DataAdapter Вам вообще не нужен.
...
Рейтинг: 0 / 0
Проблема Dataadapter
    #38639893
antihacker777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем ! Поздно додумался. Пробовал оба варианта. И оба работают.

Пусть Вас Бог спасет и сохранит !!!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема Dataadapter
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]