2016-01-28 2 views
0

У меня есть сервер под управлением Windows Server 2003 с IIS 6.0. Мое классическое приложение ASP прекрасно работает. Я пытаюсь заставить мое приложение работать на IIS 7 и Windows Server 2008 на этом новом сервере, чтобы моя компания захотела выполнить миграцию, однако я пытался бороться с запросом на файл CSV.Ошибка при запросе файла CSV

Код один и тот же в обеих средах, и, хотя он отлично работает на моей машине IIS 6, он отказывается предоставить мне доступ к моему RecordSet, сгенерированному запросом.

Вот код:

Set conExcel = Server.CreateObject("ADODB.Connection") 

conExcel.Open "Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("xls\") &";Extended Properties=""Text;HDR=Yes;IMEX=1; ImportMixedTypes=Text;FMT=Delimited(;)""" 

strSQL="SELECT * FROM ["& strFile &"]" 

set SQL = Server.createobject("ADODB.Recordset") 

SQL.Open strSQL,conExcel 

Файл CSV содержит несколько столбцов. Один из них называется NAME. код, чтобы сохранить его в переменной заключается в следующем:

strName = SQL("NAME") 

Я получаю ошибку только тогда, когда работает на IIS 7 является классическим «Элемент не может быть найден в коллекции, соответствующий запрашиваемым именем или порядковым». Я не нашел ничего в Интернете, связанных с изменениями в IIS 7, которые повлияют на эту функцию. Извините, за длинную статью.

+0

Когда вы скопировали файл csv на новый сервер, был ли файл schema.ini, который нужно было переместить с ним. Подробнее см. Здесь. https://msdn.microsoft.com/en-us/library/ms709353%28v=vs.85%29.aspx – John

+0

Нет, не было. Док говорит, что это действительно не нужно. Если у вас нет более сложных данных. Мой просто текст. Это верно? – Lightspeed

ответ

0

После великой битвы я, наконец, удалось заставить его работать.

Выполняется запрос, указанный в вышеприведенном вопросе. Проблема заключается в доступе к набору записей CSV-файла. По-видимому, я не могу вызвать столбец, написав SQL («NAME»).

Мне нужно было найти другой способ доступа к объектам запросов. Вы можете вызвать заголовки, набрав «SQL.Fields (0) .Name». Это массив, каждая итерация перемещается до следующего столбца. Для строк это «SQL.Fields (0) .Value».

Проблема была в том, что я не мог повторять «.Value». Все значения строк были гигантской строкой в ​​SQL.Fields (0) .Value. Мне просто нужно было разбить его, пропуская ';' символ и вуаля:

arrayCSV = split(SQL.Fields(0).Value,";") 

Вместо вызова SQL ("NAME"), я просто изменил его:

strName = arrayCSV(1) 
strJob = arrayCSV(2) 

и так далее ...

Надеется, что это поможет кому-то в будущее. И я до сих пор не знаю, является ли это IIS 7 или конфигурацией где-то на самом сервере.

0

Что произойдет, если вы измените свое SQL предложение

strSQL = "SELECT [name] AS strName FROM ...." 

, а затем читать приговор

strName = SQL("strName") 
Смежные вопросы