Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема Dataadapter
|
|||
|---|---|---|---|
|
#18+
Всем привет. Вот код. //***************Возвращаем список ТОП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, который требуется предварительно закрыть." В чем дело ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 09:06 |
|
||
|
Проблема Dataadapter
|
|||
|---|---|---|---|
|
#18+
antihacker777 Код: c# 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 09:36 |
|
||
|
Проблема Dataadapter
|
|||
|---|---|---|---|
|
#18+
antihacker777Здесь вызывает ошибку - "Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть." В чем дело ?В том, что внутри метода Fill Вашего topadapter создаётся свой DataReader для чтения результатов запроса. И это приводит к ошибке. Извлечение данных с помощью DataReader Закрытие DataReaderПо окончании использования объекта DataReader всегда следует вызывать метод Close . Если метод Command содержит выходные параметры или возвращаемые значения, они будут недоступны до закрытия объекта DataReader . Имейте в виду, что пока объект DataReader открыт, соединение Connection используется исключительно этим объектом DataReader . Невозможно выполнять какие-либо команды для Connection , включая создание другого объекта DataReader , пока исходный объект DataReader не будет закрыт. P.S.: ну и поиском можно было воспользоваться по тексту ошибки: Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 09:48 |
|
||
|
Проблема Dataadapter
|
|||
|---|---|---|---|
|
#18+
Мне теперь вместо датардера использовать второй адаатаптер ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 10:26 |
|
||
|
Проблема Dataadapter
|
|||
|---|---|---|---|
|
#18+
Не попмогло. Как быть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 14:02 |
|
||
|
Проблема Dataadapter
|
|||
|---|---|---|---|
|
#18+
antihacker777, тебе нужно открыть друге соединение для DataAdapter'a или добавить параметр MultipleActiveResultSets=true в строку соединения. Еще лучшим решением использовать один запрос для получения всех данных. Что-то вроде: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 15:02 |
|
||
|
Проблема Dataadapter
|
|||
|---|---|---|---|
|
#18+
antihacker777Мне теперь вместо датардера использовать второй адаатаптер ?Напишите один запрос, где будет JOIN двух таблиц TopObjTBL и ObjectTBL и используйте один DataReader. DataAdapter Вам вообще не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2014, 15:05 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38639432&tid=1357349]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 337ms |
| total: | 455ms |

| 0 / 0 |
