Я использовал отображение данных Linq с базой данных Ms Access.Я создаю OleDbConnection
как обычно и передаю его DataContext
.
До сих пор это работало нормально, для извлечения данных из таблиц, основанных на сложных запросах, и даже работы с отношениями для автоматического заполнения спискадочерние объекты в отношении 1-N.
Однако, когда я пытаюсь вставить данные, используя следующий код:
[Table(Name = "test_table")]
public class test_item {
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int field1;
[Column]
public int field2;
}
public void Test() {
Table<test_item> tbl = this.GetTable<test_item>();
test_item x = new test_item();
x.field2 = 1222;
tbl.InsertOnSubmit(x);
this.SubmitChanges();
}
, я получаю следующую ошибку:
"Missing semicolon (;) at end of SQL statement."
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.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject item)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.Insert(TrackedObject item)
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
at MyClass.Test() in C:\...\MyClass.cs:line 123
Если я удаляю флаг IsDbGenerated
, он не падает, но в этом случае я вынужден указать первичный ключ (x.field1 = 55
), но мне бы хотелось, чтобы он назначался автоматически.
Какможно ли избежать этого исключения?