Проблема с вставкой в ​​файл .dbf

Этот код не сохраняет никаких данных в файле dbf. Что здесь не так? Вот код с рекомендуемыми изменениями. Спасибо.

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TEMP;Extended Properties=dBase IV"; 
        using (OleDbConnection connection = new OleDbConnection(connectionString)) 
        using (OleDbCommand command = connection.CreateCommand()) 
        { 
            connection.Open(); 
            command.CommandText = @"CREATE TABLE TEST (Id Text, Changed Text, Tacos Text)"; 
            command.ExecuteNonQuery(); 
        }
        using (OleDbConnection connection2 = new OleDbConnection(connectionString))
        using (OleDbCommand command2 = connection2.CreateCommand())
        {
            connection2.Open();
            command2.CommandText = @"Insert into TEST (Id, Changed, Tacos) VALUES ('One','Two','Three')";

            try
            {
                command2.ExecuteNonQuery();
            }
            catch (Exception ee) 
            {
                MessageBox.Show(ee.ToString());
            }
        }

person News Reader    schedule 10.03.2012    source источник
comment
Вы построили это с помощью Visual Studio? Вы запускаете его в отладчике? Ваш файл .dbf находится в файле решения VS? Каково его свойство «Копировать в выходной каталог»? Какой путь к .dbf? Каков путь к файлу, который вы открываете, в котором, по вашему мнению, нет сохраненных данных? Поставьте точку останова на new OleDbConnection(...) и проверьте, действительно ли путь соответствует тому, что вы думаете.   -  person Dour High Arch    schedule 10.03.2012


Ответы (1)


Не положительно, но, судя по вашему соединению, вы подключаетесь к корню C:.... плохо... Это может быть просто вопрос разрешений и невозможности записи в корневой каталог».

Я бы предложил создать ваше подключение к НЕКОТОРОЙ подпапке, даже если это просто

C:\MyDBFTesting\

После этого посмотрите, действительно ли сработал результат «CREATE TABLE», и вы можете увидеть «test.dbf».

Наконец, поместите ваш executeNonQuery() в try/catch

try
{
   command2.ExecuteNonQuery()
}
catch( Exception e )
{
   string x = e.Message;
}

поставьте точку останова в улове и перейдите... посмотрите, какой ДРУГОЙ элемент/сообщения могут быть в объекте исключения "e", чтобы предоставить вам больше возможных ответов.

Увидев контекст «.dbt» (который указывает на более свободный текст, а не на фиксированные/стандартные типы), я бы изменил ваше создание, чтобы явно указать CHARACTER емкости фиксированного размера... что-то вроде

create table Test ( ID C(10), Changed C(10), Tacos C(10) )

C = символ, а 10 — максимальный размер, допустимый в столбце. Другие типы данных, такие как I = int, D = только дата, T = дата/время, L = логический и т. д. Это «известные» типы, обеспечивающие строгую структуру. ТЕКСТ имеет произвольную форму, и его содержимое попадает в файл .dbt, но ДОЛЖНА быть соответствующая запись, но в остальном она не отображается.

Тогда ваша команда вставки будет работать одинаково.

person DRapp    schedule 10.03.2012
comment
Таблица (файл) создается. Также есть заголовки столбцов, но нет строки. Никаких исключений не генерируется с помощью try catch. - person News Reader; 10.03.2012
comment
@NewsReader, тогда я бы все равно запустил executenonquery в попытке поймать и посмотреть, может ли/о какой ошибке быть сообщено. Это МОЖЕТ быть так же просто, как исключить ссылку .DBF на команду вставки, поскольку это подразумевается, поскольку вы подключены к пути, это предполагает расширение .DBF. -- одна ПОСЛЕДНЯЯ мысль, ИМЯ, вероятно, является ЗАРЕЗЕРВИРОВАННЫМ словом... измените свою таблицу создания на что-то ДРУГОЕ, чем имя... - person DRapp; 10.03.2012
comment
Спасибо за ваш ответ. Я изменил столбец «Имя» на «Тако», и новое имя заголовка столбца отображается как «Тако». Но до сих пор нет ряда. Может быть, синтаксис вставки неверен? Я обновил код. - person News Reader; 10.03.2012
comment
Похоже, что файл .dbt создается вместе с файлом .dbf. Строка находится в этом файле, а не в файле .dbf. - person News Reader; 10.03.2012
comment
@NewsReader, см. пересмотренный ответ, объясняющий типы столбцов и то, с чем вы МОЖЕТЕ столкнуться. Хотя я лично не использовал драйверы DBASE, а использовал поставщик Microsoft Visual Foxpro OleDb, у меня была отличная реакция на это... - person DRapp; 10.03.2012