Проблема с вставкой в ​​файл .dbf - PullRequest
1 голос
/ 10 марта 2012

Этот код не сохраняет никаких данных в файле 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());
            }
        }

1 Ответ

0 голосов
/ 10 марта 2012

Не уверен, но, глядя на ваше соединение, вы подключаетесь к корню 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, но ДОЛЖНА быть соответствующая запись, но в противном случае она не будет отображаться.

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

...