2012-01-20 2 views
0

По какой-то причине я получаю сообщение об ошибке «Недопустимое имя столбца allocationStart» при попытке выполнить запрос. Это значение находится в пределах функции dateadd, а столбец DOES существует в базе данных. это datetime.Недопустимое имя столбца 'allocStart'

Вот запрос:

cmd.commandText = "Insert Into EmpPac 
        (catalogIdent, empPacIdent, empIdent, allocation, 
         quantityLimit, quantityIssued, quantityShipped, 
         allocationMonths, sizeChartIdent, sizeNotes, nextUpdate) 
        values ('" & catalogIdent & "', '" & intvalue_EmpPak 
         & "', '" & empIdent & "',"&jobQuantityLimit&",'" 
         &jobQuantityLimit&"', '0', '0',"& 
         allocationMonths&", '"& sizeChartident & 
         "', '', DATEADD(month, "&allocationMonths& 
         ", allocationStart))" 
cmd.execute 
+2

Прежде всего, ваш запрос работает в студии Managment? Затем используйте SqlParameter, а не строку cacatenation, по многим причинам, особенно вам не придется иметь дело с типом параметра, и вы избежите атаки Sql Injection –

+0

Вы уверены, что это ASP.NET, а не классический ASP? – Oded

+2

И вам действительно нужно искать [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) – Oded

ответ

2

Вы не указали, что таблица allocationstart в

Вы должны сделать свой INSERT источник быть SELECT из таблицы источника, не используя. ключевое слово VALUES, так как оно ожидает список явных значений.

Например:

INSERT INTO MyTargetTable 
SELECT <stuff>, DATEADD(month, XXX, allocationstart) 
FROM MySourceDataTable 
0

Я буду честен - я не следующий ваш вопрос 100%, однако я думаю, что я понимаю, что вы пытаетесь сделать.

Исходная ошибка возникает из команды DATEADD.

Третий параметр DATEADD - это значение datetime для управления.

Я предполагаю, что ваш столбец «allocStart» автоматически устанавливает текущее время даты в базе данных и передает этот столбец функции DATEADD для управления им и вставляет возвращаемое значение в столбец «nextUpdate». Если это то, что вы пытаетесь сделать, столбец автоматического datetime не будет установлен (может возвращать дату/время и т. Д.) До тех пор, пока строка не будет зафиксирована, поэтому вы не можете использовать автоматически создаваемые столбцы внутри функции из инструкции INSERT ,

Я также настоятельно рекомендую вам взглянуть на paramaters, его гораздо более безопасную и лучшую практику.

Если после номера месяца для столбца nextUpdate вы можете использовать DateTime.Now.Month и добавить это в свою строку SQL.

Смежные вопросы