OleDbException при выполнении INSERT в базе данных .mdb

У меня есть база данных, в которой есть таблица с именем Schedule. Это выглядит так:

Schedule
--------
ScheduleID (number)
BackupID   (number)
Repository (text)
Interval   (text)
Type       (text)

Теперь я пытаюсь вставить значения в эту таблицу следующим образом:

List<string> scheduleData = this.scheduler.getSchedule();
string repository = scheduleData[0];
string interval = scheduleData[1];
string type = scheduleData[2];

List<string> selectedBackup = this.backupForm.getSelectedUser();
string backupID = selectedBackup[0];

string connetionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\db\\dbBackupUtility.mdb";
OleDbConnection conn = new OleDbConnection(connetionString);
conn.Open();
OleDbCommand sql = new OleDbCommand("INSERT INTO Schedule (BackupID, Repository, Interval, Type) VALUES (@BackupID, @Repository, @Interval, @Type)", conn);
sql.Parameters.AddWithValue("@BackupID", backupID);
sql.Parameters.AddWithValue("@Repository", repository);
sql.Parameters.AddWithValue("@Interval", interval);
sql.Parameters.AddWithValue("@Type", type);

sql.ExecuteNonQuery();

conn.Close();  

Однако я получаю OleDbException каждый раз, когда программа выполняет эту строку:

sql.ExecuteNonQuery();

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

Текст исключения:

Message: "Syntax error in INSERT statement"
StackTrace =    "at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   at WindowsFormsApplication1.BackupUtility.scheduler_VisibleChanged(Object sender, EventArgs e) in c:\Users\Teichler\Dropbox\VS_Projects\Projects\WindowsFormsApplication1\WindowsFormsApplication1\MainForm.cs:Line104."
Inner Exception: null

person LeonidasFett    schedule 02.07.2013    source источник
comment
что такое текст исключения?   -  person C Sharper    schedule 02.07.2013
comment
Я не могу найти больше информации об исключении, VS просто сообщает мне, что OleDbException произошло в System.Data.dll. Эта информация отображается в окне вывода, выполнение программы продолжается в обычном режиме.   -  person LeonidasFett    schedule 02.07.2013
comment
сделайте одно, вставьте вышеприведенный код в try - catch bock. Правильно поймать исключение и сообщить мне текст исключения   -  person C Sharper    schedule 02.07.2013
comment
хорошо, я добавил дополнительную информацию. Дай мне знать если тебе нужно что-нибудь еще   -  person LeonidasFett    schedule 02.07.2013


Ответы (3)


Interval — это ключевое слово для Jet/ Доступ, измените свою команду на это (окружите интервал скобками):

OleDbCommand sql = new OleDbCommand("INSERT INTO Schedule (BackupID, Repository, [Interval], Type) VALUES (@BackupID, @Repository, @Interval, @Type)", conn);
person Simon Mourier    schedule 02.07.2013

Эта ошибка возникает из-за того, что у вас есть одно значение null, которое вы передаете в качестве параметра для вставки. Столбец вашей таблицы для этого значения не принимает NULL.

Отладьте свой код. Определите переменную NULL и сделайте ее в правильном типе данных.

Использовать ? вместо @.

person C Sharper    schedule 02.07.2013
comment
хорошо, я снова отладил, но не нашел нулевого значения. все 4 параметра имеют значения: backupID имеет значение 4, репозиторий имеет значение Daily, интервал имеет значение 15:00 и тип имеет значение Full - person LeonidasFett; 02.07.2013
comment
Я тоже так пробовал, тоже методом OleDbCommand.AddWithValue. К сожалению оба не работают... - person LeonidasFett; 02.07.2013

Возможно, потому что Type является ключевым словом в sql. Попробуйте изменить свое утверждение с

"INSERT INTO Schedule (BackupID, Repository, Interval, Type)

to

"INSERT INTO Schedule (BackupID, Repository, Interval, [Type])

окружающий Введите в скобках

person Gratzy    schedule 02.07.2013