ibm.data.informix не получает правильные данные из базы данных - PullRequest
2 голосов
/ 15 декабря 2011

Сервер: IBM Informix Dynamic Server версии 11.70.FC1GE
Клиент: IBM Data Server Пакет драйверов 5765-F41
DLL-библиотека клиента Dotnet:

IBM.Data.Informix.dll
Версия файла: 9.7.4.2
Версия сборки: 9.0.0.2
Версия продукта: 9.7.4.2

Информация о таблице:

Column name     Type                       Nulls

timeid          interval day to minute     yes
cb1             smallint                   yes
cb2             smallint                   yes
data1           smallfloat                 yes
data2           smallfloat                 yes
...
data60          smallfloat                 yes
data61          smallfloat                 yes


.Net Код:

dim _conn as New IfxConnection("Database=HMS;Server=10.1.1.9:17859;UID=informix;Password=informix;")
_conn.Open()

Dim _cmdstr As String = "select * from data"
Dim _cmd As New IfxCommand(_cmdstr, _connection)
Dim _dr As IfxDataReader = _cmd.ExecuteReader(System.Data.CommandBehavior.SingleResult)
While _dr.Read
Debug.WriteLine(_dr.GetValue(0))
next

Тип _dr.GetValue (0) является строкой.Как вы можете видеть здесь, многие интервальные данные не выбираются правильно!(Только первые 3 символа)

Это может привести к большой потере данных.Кто-нибудь знает, как я могу решить эту проблему?

Спасибо заранее.

Output from debug writeline: (... = good data I left out)

1 00:00
...
2 00:45
2 01:00
2 0
2 01:30
2 01:45
...
2 23:30
2 23:45
3 0
3 00:15
3 00:30
...
3 02:00
3 02:15
3 0
3 02:45
3 03:00
...
4 03:30
4 03:45
4 0
4 04:15
4 04:30
...
5 02:15
5 02:30
5 0
5 03:00
5 03:15
...
5 04:45
5 05:00
5 0
5 05:30
5 05:45
...
6 06:00
6 06:15
6 0
6 0
6 07:00
6 07:15
...
7 05:00
7 05:15
7 0
7 05:45
7 06:00
...
7 07:30
7 07:45
7 0
7 08:15
7 08:30
...
8 08:45
8 09:00
8 0
8 0
8 09:45
8 10:00
...
9 07:45
9 08:00
9 0
9 08:30
9 08:45
...
9 10:15
9 10:30
9 1
9 11:00
9 11:15
...
10 11:30
10 11:45
10 1
10 12:15
10 12:30
...
11 10:15
11 10:30
11 1
11 11:00
11 11:15
...
11 12:45
11 13:00
11 1
11 13:30
11 13:45
...
12 14:00
12 14:15
12 1
12 1
12 15:00
12 15:15
...
13 12:45
13 13:00
13 1
13 1
13 13:45
13 14:00
...
13 15:30
13 15:45
13 1
13 16:15
13 16:30
...
14 16:45
14 17:00
14 1
14 17:30
14 17:45
...
15 15:30
15 15:45
15 1
15 16:15
15 16:30
...
15 18:00
15 18:15
15 1
15 18:45
15 19:00
...
16 19:15
16 19:30
16 1
16 20:00
16 20:15
...
17 18:00
17 18:15
17 1
17 18:45
17 19:00
...
17 20:30
17 20:45
17 2
17 21:15
17 21:30
...
18 21:45
18 22:00
18 2
18 22:30
18 22:45
...
19 20:30
19 20:45
19 2
19 21:15
19 21:30
...
19 23:00
19 23:15
19 2
19 2
20 00:00
20 00:15
...
21 00:15
21 00:30
21 0
21 0
21 01:15
21 01:30
...
21 23:15
21 23:30
21 2
22 00:00
22 00:15
..
22 01:45
22 02:00
22 0
22 02:30
22 02:45
...
23 03:00
23 03:15
23 0
23 03:45
23 04:00
...
24 01:45
24 02:00
24 0
24 02:30
24 02:45
...
24 04:15
24 04:30
24 0
24 05:00
24 05:15
...
25 05:30
25 05:45
25 0
25 06:15
25 06:30
...
26 06:45
26 07:00
26 0
26 07:30
26 07:45
...
27 08:00
27 08:15
27 0
27 08:45
27 09:00
...
29 10:30
29 10:45
29 1
29 1
29 11:30
29 11:45
...
30 12:00
30 12:15
30 1
30 12:45
30 13:00
...
30 23:45

1 Ответ

1 голос
/ 15 февраля 2012

Через ODBC он работал правильно.

С другой программой, использующей JDBC, он работал правильно.

Со старой C-программой, использующей встроенный sql, он работал правильно.

Хотя у меня немного не хватило времени, я сделал грязное исправление, выполнив приведение к nvarchar (9)

, поэтому оператор SQL стал:

select cast(timeid as nvarchar(9)), * from data
...