powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Опять я с OleDbReader-ом не могу поладить
5 сообщений из 5, страница 1 из 1
Опять я с OleDbReader-ом не могу поладить
    #32174924
ArchiMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу текст на ASP.NET:

Dim con As New OleDb.OleDbConnection("Provider=OraOLEDB.Oracle.1;Password=aaa;Persist Security Info=True;User ID=aaa;Data Source=oracle;")
Dim com As New OleDb.OleDbCommand("SELECT rownum, ВАЛЮТА, БАЛ_АКТИВ, ЧИСТ_БАЛ, ЧИСТ_СПОТ, ЧИСТ_СРОЧ, ЧИСТ_ОПЦ, ЧИСТ_ГАР, СОВ_БАЛ, СОВ_ВНЕБ, ОТКРЫТАЯ, КУРС, ДЛИННАЯ, КОРОТКАЯ, ОТКР_ПРОЦ, ЛИМИТ FROM ОТЧЕТ.ОВП WHERE (ДАТА = TO_DATE('" + Request.QueryString.Item("date") + "','DD.MM.YYYY')) AND (ФИЛИАЛ = '" + Request.QueryString.Item("branch") + "')")
con.Open()
com.Connection = con
rdОВП = com.ExecuteReader(CommandBehavior.SingleRow)

While rdОВП.Read()
newRow = New HtmlTableRow()
col = 0
While col < rdОВП.FieldCount
newCell = New HtmlTableCell()

If Not rdОВП.IsDBNull(col) Then
If rdОВП.GetDataTypeName(col) = "DBTYPE_VARNUMERIC" And col <> 0 Then
newCell.InnerText = FormatNumber(rdОВП.Item(col), 4)
Else
newCell.InnerText = rdОВП.Item(col)
End If
newRow.Cells.Add(newCell)
Else
newCell.InnerText = "0"
newRow.Cells.Add(newCell)
End If

col += 1
End While

Table2.Rows.Insert(3, newRow)
End While
________________________________________________________
Так он мне гад в ответ:

Если rdОВП = com.ExecuteReader(CommandBehavior.Default):

Exception Details: System.Data.OleDb.OleDbException: No error information available: DB_E_BADACCESSORTYPE (0x80040E4B).

А если rdОВП = com.ExecuteReader(CommandBehavior.SingleRow), то все пучком.
Так с какого же перепугу мне реадером нужна одна строчка?
А если все делать визардами, получается нормально...
...
Рейтинг: 0 / 0
Опять я с OleDbReader-ом не могу поладить
    #32175073
ArchiMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя наврал, визардами с таким запросом тоже ненормально.
Убираю все поля с подчерками в имени - нормально, скажите, это - нормально?
У меня полбазы содержит таблицы с подчерками и в именах и в полях, а таблиц сотни!!!
Что делать?
...
Рейтинг: 0 / 0
Опять я с OleDbReader-ом не могу поладить
    #32175161
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в си шарпе я бы порекомендовал поставить @ перед строкой
в васике тоже наверное есть аналог...
...
Рейтинг: 0 / 0
Опять я с OleDbReader-ом не могу поладить
    #32175774
ArchiMage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел в чем была проблема.

OleDbProvider от MS не понимает чисел с точностью большей какой-то, в одном поле во второй записи была чиселка примерно такая: 2,321654987654321
И при чтении выходил этот проклятый Exception, который говорит совсем не о том, о чем должен был бы.

Теперь пришлось при формировании таблицы округлять значение до 4-х символов после запятой. Этого мне хватает.

Так что имейте... ввиду.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Опять я с OleDbReader-ом не могу поладить
    #37761875
Тема старая, но считаю себя обязанным ответить, потому что нарвался на то же самое, но чтобы понять что это то же самое - ушел день.

Пишу прогу на C# которая через OleDbDataReader вытягивает данные из оракла (используется оракловый родной OEDB провайдер) и этот ридер вскармливается в SqlBulkCopy чтобы тот засунул эти данные в MSSQL.

Получаю вот такую штуку:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[e] Message: Клиент доступа не является параметрическим.
Type: System.Data.OleDb.OleDbException
Stack Trace:
   в System.Data.OleDb.OleDbDataReader.ProcessResults(OleDbHResult hr)
   в System.Data.OleDb.OleDbDataReader.GetRowDataFromHandle()
   в System.Data.OleDb.OleDbDataReader.GetValueBinding(MetaData info)
   в System.Data.OleDb.OleDbDataReader.GetColumnBinding(Int32 ordinal)
   в System.Data.OleDb.OleDbDataReader.GetValue(Int32 ordinal)
   в System.Data.SqlClient.SqlBulkCopy.GetValueFromSourceRow(Int32 columnOrdinal, _SqlMetaData metadata, Int32[] UseSqlValue, Int32 destRowIndex)
   в System.Data.SqlClient.SqlBulkCopy.WriteToServerInternal()
   в System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServer(Int32 columnCount)
   в System.Data.SqlClient.SqlBulkCopy.WriteToServer(IDataReader reader)
   в UniversalETL.SqlDataMover.PartitionMove(WorkerParameters aParameters) в G:\Projects\UniversalETL\UniversalETL\SqlDataMover.cs:строка 305



Вот что это за ерунда такая "Клиент доступа не является параметрическим"?

После того как научился дебагать .NET код через .NET Reflector с помощью вот этого поста попал в метод GetRowDataFromHandle класса OleDbDataReader. И вот там-то и увидел что

if (result < OleDbHResult.S_OK)
{
this.ProcessResults(result);
}

вот этот "умный" метод ProcessResults выбрасывает бестолковый текст екзепшена "Клиент доступа не является параметрическим", но на самом деле result = DB_E_BADACCESSORTYPE

Вот если бы дебаггером не вошел в этот код и не увидел название DB_E_BADACCESSORTYPE - фиг бы я нашел этот пост и понял бы в чем причина.

А причина та же самая, что и у автора: вьюха на оракле, которая отдает данные, делает деление одного поля на другое, выходит точность с кучей знаков после запятой. Ну вот это собственно и не нравится родному оракловому oledb провайдеру.

Перевод "Клиент доступа не является параметрическим" - "The specified accessor was not a parameter accessor." - это для гугла, чтобы другие люди могли найти.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Опять я с OleDbReader-ом не могу поладить
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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