Вставьте запрос для ms-доступа с объектом Oledb, получающим исключение из недопустимого запроса

Я использую следующий код, и он дает исключение недопустимой команды Insert.

row — объект DataRow для добавления в базу данных, conn — объект OleDBConnection.

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = `"Insert Into Appointments(ID,Body,End,Location,Start,Subject,Properties)"
                                                + "Values(@ID,@Body,@End,@Location,@Start,@Subject,@Properties)";


cmd.Parameters.Add("@ID", OleDbType.WChar).Value = row[0].ToString();
cmd.Parameters.Add("@Body", OleDbType.WChar).Value = row[1].ToString();
cmd.Parameters.Add("@End", OleDbType.Date).Value =  Convert.ToDateTime(row[2]).Date.ToLongDateString();
cmd.Parameters.Add("@Location", OleDbType.WChar).Value = row[3].ToString();
cmd.Parameters.Add("@Start", OleDbType.Date).Value = Convert.ToDateTime(row[4]).Date.ToLongDateString();
cmd.Parameters.Add("@Subject", OleDbType.WChar).Value = row[5].ToString();
cmd.Parameters.Add("@Properties", OleDbType.WChar).Value = row[6].ToString();


                conn.Open();                    
                cmd.ExecuteNonQuery();          //At this line exception is generating
                conn.Close();

Пожалуйста, помогите мне в этом.


person VIKRAM    schedule 15.09.2011    source источник
comment
Опубликуйте полное сообщение об ошибке   -  person Sandeep G B    schedule 15.09.2011
comment
{Синтаксическая ошибка в операторе INSERT INTO.}   -  person VIKRAM    schedule 15.09.2011


Ответы (3)


У вас есть одно (возможно, больше) зарезервированное слово в именах полей вашей таблицы.

Имя поля End... как минимум.

Пытаться

cmd.CommandText = `"Insert Into Appointments(ID,Body,[End],Location,Start,Subject,Properties)"
                                                + "Values(@ID,@Body,@End,@Location,@Start,@Subject,@Properties)";
person hawbsl    schedule 15.09.2011

Поддерживает ли таблица «Встречи» вставку идентификатора? Если столбец ID является значением идентификатора, это может вызвать проблему.

person denolk    schedule 15.09.2011
comment
Идентификатор является первичным ключом и имеет тип Text, но может не создавать проблем, поскольку он получен из набора данных с той же схемой, что и база данных. - person VIKRAM; 15.09.2011

Я думаю, что типы данных, которые вы используете для своих параметров, неверны.

Если ваш столбец ID является числовым столбцом, вы должны использовать не OleDbType.WChar, а OleDbType.Integer, например.

Для буквенно-цифровых столбцов я бы тоже не использовал OleDbType.WChar, а OleDbtype.VarChar.

См. также перечисление OleDbType.

person Frederik Gheysels    schedule 15.09.2011