Я пытаюсь написать оператор CREATE TABLE
для Microsoft Access (который должен выполняться через приложение C#/.NET с использованием OleDbConnection), используя атрибут WITH COMPRESSION
, чтобы создавать столбцы символов (TEXT) с использованием однобайтовых символов чем двухбайтовые символы Юникода, как описано в MSDN here.MS Access CREATE TABLE "WITH COMPRESSION" синтаксис?
Атрибут WITH COMPRESSION может использоваться только с типами данных CHARACTER и MEMO (также называемыми TEXT) и их синонимами.
Атрибут WITH COMPRESSION был добавлен для столбцов CHARACTER из-за изменения формата представления символов в Юникоде. Для символов Юникода одинаково требуется два байта для каждого символа. Для существующих баз данных Microsoft® Jet, содержащих преимущественно персональные данные, это может означать, что файл базы данных почти удваивается по размеру при преобразовании в формат ядра базы данных Microsoft Access. Однако представление Unicode многих наборов символов, ранее обозначаемых как однобайтовые наборы символов (SBCS), можно легко сжать в один байт. Если вы определяете столбец CHARACTER с этим атрибутом, данные будут автоматически сжаты, поскольку они будут сохранены и несжаты при извлечении из столбца.
Когда я пытаюсь выполнить следующую инструкцию (которая, я считаю, синтаксически корректна для MSDN) через OleDbConnection, я получаю синтаксическую ошибку.
CREATE TABLE [Foo] ([COL1] TEXT(255) WITH COMPRESSION)
Кроме того, выполнение того же оператора непосредственно в MS Access 2013 в качестве запроса дает ошибку синтаксиса в WITH
.
Выполнение
CurrentProject.Connection.Execute("CREATE TABLE [Foo1] ([COL1] TEXT(255) WITH COMPRESSION)")
из Access VBA делает работу, однако.
Если я извлекаю атрибут WITH COMPRESSION
, оператор выполняет без ошибок как через OleDb, так и непосредственно в MS Access.
Любые идеи, что я делаю неправильно?
Ошибка при выполнении вашего оператора 'CREATE TABLE' с' CurrentProject.Connection.Execute' в Access 2010. Тогда, с этой таблицей в представлении Design, свойство * Unicode Compression * поля является * True *, как и ожидалось , Есть ли больше сообщений об ошибках, чем просто «синтаксическая ошибка» *? – HansUp
Я не использую VBA или любое кодирование в Access - я использую C# и OleDbConnection. Но я получаю ту же ошибку, если я создаю новый запрос в MS Access, перейдите в «SQL View» и попробуйте запустить вышеприведенный оператор CREATE TABLE. –
Вы должны делать что-то не так в своем проекте C#. [Этот код] (http://pastebin.com/QYXC1FvY) отлично подходит для меня. –