У меня есть таблица БД с двумя datetime нулевые столбцы, которые мне нужно прочитать с ASP-страницы, используя VBScript.Почему нулевые значения выбираются из набора записей ADO вместо правильных в зависимости от порядка извлечения? (Таблица БД имеет значения NTEXT)
Это код, который я написал:
Set cmd = Server.CreateObject("ADODB.Command")
With cmd
.ActiveConnection = conn
.CommandType = adCmdText
.Prepared = True
.CommandText = "SELECT * FROM storico_corsi WHERE stc_id = 5 "
Set rs = .Execute
Response.Write("stc_scadenza = {" & rs("stc_scadenza") & "}, ")
Response.Write("stc_inizio = {" & rs("stc_inizio") & "} ")
If IsEmpty(rs("stc_inizio")) Then
Response.Write("- ERROR!")
End If
End With
Этот код дает этот выход:
stc_scadenza = {19/04/2014}, stc_inizio = {} - ERROR!
Если я поменять порядок поиска в
...
Response.Write("stc_inizio = {" & rs("stc_inizio") & "}, ")
Response.Write("stc_scadenza = {" & rs("stc_scadenza") & "} ")
...
это (правильный) результат:
stc_inizio = {19/02/2014}, stc_scadenza = {19/04/2014}
Почему небольшое изменение в порядке извлечения элементов из набора записей ADO дает совершенно другой результат?
Пожалуйста, обратите внимание, что я использую итальянскую локаль (дд/мм/гггг) и что stc_inizio
и stc_scadenza
, в то же время часто устанавливают в полночь метки времени, имеют тип SQL даты и времени.
UPDATE # 1: Я сделал код проще и понятнее за счет сокращения кода манипуляции всего два полей, добавив проверку пустоты и удаление JSON вещи в целом. Некоторые комментарии ниже относятся к предыдущим, более сложным версиям.
UPDATE # 2: Если я заменю запрос SQL с
SELECT stc_inizio, stc_scadenza FROM storico_corsi WHERE stc_id = 5
или
SELECT stc_scadenza, stc_inizio FROM storico_corsi WHERE stc_id = 5
это работает должным образом! Но почему? Это таблица DB Я использую:
CREATE TABLE [dbo].[storico_corsi] (
[stc_id] [bigint] IDENTITY(1,1) NOT NULL,
[stc_id_ute] [bigint] NOT NULL,
[stc_utente] [varchar](100) NULL,
[stc_anagrafica] [ntext] NULL,
[stc_id_can] [bigint] NULL,
[stc_canale] [varchar](500) NULL,
[stc_FE_id] [bigint] NULL,
[stc_quest_finale] [ntext] NULL,
[stc_quest_corretto] [ntext] NULL,
[stc_reg_fad] [ntext] NULL,
[stc_inizio] [datetime] NULL,
[stc_scadenza] [datetime] NULL,
[stc_terminato] [char](1) NULL
CONSTRAINT [DF_storico_corsi_stc_terminato_1] DEFAULT ('N'),
[stc_fine] [datetime] NULL,
[stc_tempo] [bigint] NULL
CONSTRAINT [DF_storico_corsi_stc_tempo] DEFAULT ((0)),
[stc_data_in] [datetime] NULL
CONSTRAINT [DF_storico_corsi_stc_data_in_1] DEFAULT (getdate()),
[stc_progressivo] [int] NULL,
[stc_anno] [int] NULL,
CONSTRAINT [PK_storico_corsi] PRIMARY KEY CLUSTERED ([stc_id] ASC)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
UPDATE # 3: Проблема может быть воспроизведена в любое время я включать любого из 3 NTEXT столбцов в запросе. Если я не сделаю SELECT
их, ничего плохого не произойдет. По-видимому, значения ntext ломают запись, но они также делают это непредсказуемым образом, который зависит от порядка поиска других полей.
UPDATE # 4: BLOBs/NTEXT s должны быть выбраны в прошлом с помощью ADO. Это утверждение звучит немного сумасшедшим, но это то, что я нашел здесь: http://p2p.wrox.com/sql-server-2000/3211-cant-pull-data-ntext-field-into-recordset.html#post78234 Это согласуется с моим опытом.
Как раз для того, чтобы устранить очевидное, существует определенная только одна строка в базе данных, где 'stc_id' равен 5? –
Да. Я проверил прямо сейчас. :-) –
Хорошо. Итак, первое, что нужно сделать, это исключить возможность того, что это (пользовательский?) Класс jsArray вызывает проблемы. Если вы просто распечатываете значение 'rs (" stc_scadenza ")' с исходным кодом, имеет ли оно значение или оно равно null? –