powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / timeout
9 сообщений из 34, страница 2 из 2
timeout
    #33419907
emike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробовали пихать после, не помогло
...
Рейтинг: 0 / 0
timeout
    #33421403
emike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ещё раз попробовал, появился ещё один вызов NextResult() - явно на результат селекта. это дало повод думать, что если запретить ДатаРидеру как-либо обрабатывать результаты выполнения запроса (нечего, похоже, обрабатывать), то проблема решится. только вот как это сделать..
...
Рейтинг: 0 / 0
timeout
    #33421906
хм...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вы не желаете трясти разработчиков провайдера,
тогда предлагаю поставить какой-нибудь дизассемблер ( Reflector на пример)
и реализовать все самим на более низком уровне... как минимум к вам придет "понимание сути происходящего"(с)
по времени это займет не больше, чем то время, сколько висит здесь эта тема....
...
Рейтинг: 0 / 0
timeout
    #33422029
Привалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый, я уже потерял ход мысли. То ado, теперь ассемблер. Дело в Ридере - его и надо настроить. Если на селектах помогло собрать датасет вручную, схожий метод должен быть и здесь. роблема в том, что студия делает то, о чем ее не просят. И выход здесь - либо запретить ей выполнять эти действия, либо иммитировать их выполнение в ручную. Вполне возможно, что ридер можно заменить цепочкой более простых команд, соответствующей настройкой которых можно решить проблему.
Не будем уходить в стороны
...
Рейтинг: 0 / 0
timeout
    #33422083
хм...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уважаемый, я о том же и говорю...
понятно ваше желание, что бы за вас это кто-нибудь сделал... может быть, но я предлагаю это сделать самим.
как?
на этот вопрос вы сами сможете себе ответить, если потрудитесь поставить Reflector и посмотреть реализаци класса OdbcCommand, метода ExecuteNoneQuery.. ну и т.д.
для убедительности:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
public int ExecuteNonQuery()
{
      int num1;
      OdbcConnection.OdbcPermission.Demand();
      try
      {
            using (IDataReader reader1 = this.ExecuteReaderObject(CommandBehavior.Default, "ExecuteNonQuery"))
            {
                  reader1.Close();
                  return reader1.RecordsAffected;
            }
      }
      catch
      {
            throw;
      }
      return num1;
}

/*****************************************/

private OdbcDataReader ExecuteReaderObject(CommandBehavior behavior, string method)
{
      if ((this._cmdText == null) || (this._cmdText == ""))
      {
            throw ADP.CommandTextRequired(method);
      }
      OdbcDataReader reader1 = null;
      try
      {
            try
            {
                  ODBC32.RETCODE retcode1;
                  this.ValidateConnectionAndTransaction(method);
                  this._canceling = false;
                  if ((CommandBehavior.SingleRow & behavior) != CommandBehavior.Default)
                  {
                        behavior |= CommandBehavior.SingleResult;
                  }
                  IntPtr ptr1 = IntPtr.Zero;
                  HandleRef ref1 = this.GetStatementHandle();
                  if ((behavior & CommandBehavior.KeyInfo) == CommandBehavior.KeyInfo)
                  {
                        this.GetKeyInfoStatementHandle();
                  }
                  reader1 = new OdbcDataReader(this, this._cmdWrapper, behavior);
                  if (this.supportsCommandTimeout)
                  {
                        retcode1 = (ODBC32.RETCODE) UnsafeNativeMethods.Odbc32.SQLSetStmtAttrW(ref1, 0, (IntPtr) this.CommandTimeout, -5);
                        if (retcode1 != ODBC32.RETCODE.SUCCESS)
                        {
                              this.supportsCommandTimeout = false;
                        }
                  }
                  if (this.Connection.IsV3Driver)
                  {
                        if (reader1.IsBehavior(CommandBehavior.KeyInfo))
                        {
                              retcode1 = (ODBC32.RETCODE) UnsafeNativeMethods.Odbc32.SQLSetStmtAttrW(ref1, 0x4cc, (IntPtr) 1, -6);
                              retcode1 = (ODBC32.RETCODE) UnsafeNativeMethods.Odbc32.SQLSetStmtAttrW(ref1, 0x4cb, (IntPtr) 1, -6);
                        }
                        else
                        {
                              retcode1 = (ODBC32.RETCODE) UnsafeNativeMethods.Odbc32.SQLSetStmtAttrW(ref1, 0x4cc, IntPtr.Zero, -6);
                              retcode1 = (ODBC32.RETCODE) UnsafeNativeMethods.Odbc32.SQLSetStmtAttrW(ref1, 0x4cb, IntPtr.Zero, -6);
                        }
                  }
                  if (reader1.IsBehavior(CommandBehavior.KeyInfo) || reader1.IsBehavior(CommandBehavior.SchemaOnly))
                  {
                        retcode1 = (ODBC32.RETCODE) UnsafeNativeMethods.Odbc32.SQLPrepareW(ref1, this.CommandText, -3);
                        if (retcode1 != ODBC32.RETCODE.SUCCESS)
                        {
                              this._connection.HandleError(ref1, ODBC32.SQL_HANDLE.STMT, retcode1);
                        }
                  }
                  if ((this._parameterCollection != null) && (0 < this._parameterCollection.Count))
                  {
                        int num1 = this._parameterCollection.Count;
                        this._cmdWrapper.ReAllocParameterBuffers(num1);
                        reader1.SetParameterBuffers(this._cmdWrapper._parameterBuffer, this._cmdWrapper._parameterintBuffer);
                        for (int num2 = 0; num2 < num1; num2++)
                        {
                              this._parameterCollection[num2].Bind((HandleRef) this._cmdWrapper, this, (short) (num2 + 1), this._cmdWrapper._parameterBuffer[num2], this._cmdWrapper._parameterintBuffer[num2]);
                        }
                        this._parameterCollection.CollectionIsBound = true;
                        this._parameterCollection.BindingIsValid = true;
                  }
                  if (!reader1.IsBehavior(CommandBehavior.SchemaOnly))
                  {
                        if (reader1.IsBehavior(CommandBehavior.KeyInfo) || this._isPrepared)
                        {
                              retcode1 = (ODBC32.RETCODE) UnsafeNativeMethods.Odbc32.SQLExecute(ref1);
                        }
                        else
                        {
                              retcode1 = (ODBC32.RETCODE) UnsafeNativeMethods.Odbc32.SQLExecDirectW(ref1, this.CommandText, -3);
                        }
                        if ((retcode1 != ODBC32.RETCODE.SUCCESS) && (ODBC32.RETCODE.NO_DATA != retcode1))
                        {
                              this._connection.HandleError(ref1, ODBC32.SQL_HANDLE.STMT, retcode1);
                        }
                  }
                  this.weakDataReaderReference = new WeakReference(reader1);
                  this._connection.SetStateFetchingTrue();
                  if (!reader1.IsBehavior(CommandBehavior.SchemaOnly))
                  {
                        reader1.FirstResult();
                  }
                  this.cmdState = ConnectionState.Fetching;
            }
            finally
            {
                  if (ConnectionState.Fetching != this.cmdState)
                  {
                        if (reader1 != null)
                        {
                              int num3 = (this._parameterCollection != null) ? this._parameterCollection.Count : 0;
                              for (int num4 = 0; num4 < num3; num4++)
                              {
                                    this._parameterCollection[num4].ClearBinding();
                              }
                              ((IDisposable) reader1).Dispose();
                        }
                        if (this.cmdState != ConnectionState.Closed)
                        {
                              this.cmdState = ConnectionState.Closed;
                              this._connection.SetStateExecutingFalse();
                        }
                  }
            }
      }
      catch
      {
            throw;
      }
      GC.KeepAlive(reader1);
      GC.KeepAlive(this);
      return reader1;
}
 

...
Рейтинг: 0 / 0
timeout
    #33422110
Привалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок.
Если ты это назвал дизассемблером - есть смысл посмотреть
Я решил что ты мне асмовских годах предлагаешь поковыряться
...
Рейтинг: 0 / 0
timeout
    #33422118
emike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, похоже что полезно. Про Reflector не знал.
...
Рейтинг: 0 / 0
timeout
    #33422184
хм...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПриваловЕсли ты это назвал дизассемблером - есть смысл посмотретьпризнаю, не грамотно выразился - декомпилятор
...
Рейтинг: 0 / 0
timeout
    #33481347
emike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
позволю себе поднять тему

проблему "решили" оборачиванием вызова ExecuteNonQuery() в try-catch без обработки исключения. запрос выполняется, база обновляется.

а вот Reflector, увы, не помог, не удалось создать наследника базавого класса из-за его sealed. похоже в с# несколько по-иному это всё делается (чем в привычных ОО-языках)
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / timeout
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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