Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Ошибка при insert'е даты в DBF-файл (C#) / 3 сообщений из 3, страница 1 из 1
04.10.2011, 17:18
    #37467644
igor_dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при insert'е даты в DBF-файл (C#)
Появилась необходимость залить данные в DBF файл (FoxBASE+/Dbase III plus, no memo).
Insert выполняется нормально для text и smallint полей, но для даты (date) постоянно вылетает ошибка.
Пробывал разные провайдеры - все равно та же ошибка...

Вот варианты:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DateTime myDate = DateTime.Now;

using (OdbcConnection conn = new OdbcConnection(@"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=db\myDb;"))
{
   conn.Open();

   OdbcCommand cmd = new OdbcCommand("INSERT INTO 1.dbf (date) VALUES(?)", conn);

   cmd.Parameters.Add("", OdbcType.Date).Value = myDate;

   cmd.ExecuteNonQuery();
}

либо так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
using (OdbcConnection conn = new OdbcConnection(@"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=db\myDb;"))
{
   conn.Open();

   OdbcCommand cmd = new OdbcCommand("INSERT INTO 1.dbf (date) VALUES({d 2011-01-01})", conn);

   cmd.Parameters.Add("", OdbcType.Date).Value = myDate;

   cmd.ExecuteNonQuery();
}

то же для OLE DB...

OdbcDbException: ERROR [42000] [Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в инструкции INSERT INTO.

или

OleDbException: Ошибка синтаксиса в инструкции INSERT INTO.

В доках ничего не могу найти!

В чем причина? Как правильно запихнуть поле типа date в DBF-базу? Может дело в провайдере?
Заранее благодарен!
...
Рейтинг: 0 / 0
04.10.2011, 17:48
    #37467727
igor_dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при insert'е даты в DBF-файл (C#)
Вот с таким провайдером дату пропускает, но ругаться на null стал!

Код: plaintext
1.
using (OleDbConnection conn = new OleDbConnection(@"Provider=vfpoledb.1;Data Source=db\myDb;Exclusive=false;Nulls=false"))
            

Модератор: Тема перенесена из форума "IBM DB2, WebSphere, IMS, U2, etc".
...
Рейтинг: 0 / 0
29.10.2011, 11:43
    #37503771
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при insert'е даты в DBF-файл (C#)
Если по английски читать умеете, то ответ тут:
click

авторThis code will insert a FoxPro Date value but not a DateTime value.

First, be sure to verfiy whether you've got a Date or DateTime value in the FoxPro table. Using SQL Pass-through, for a DateTime value you can use DToT (Date to Time), or write the DateTime value in the correct format:

Insert Into MyTable Values (DToT{^2006/02/20})

Insert Into MyTable Values ({^2006/02/20 20:33:19})

Even so, you'll always be better off with a parameterized Insert statement as PJ. suggested. That way OLE DB takes care of "translating" the data value.

One more thing - I see you've got a T as your last parameter. Are you trying to represent "True?" If that is the case, FoxPro Logical (Boolean) values are written in text as .T. and .F. and Null is written as .NULL. .

Insert Into [5.dbf] values ({^2006/02/20 20:33:19}, 'leton', 23, 'question', .T.)

Oh - and I see you've got Insert Into [5.dbf]... Is "[5.dbf]" the name of the table? In SQL Pass-through a table is usually represented by it's name only, without the DBF extension. Also, Fox tables must begin with an alpha character or an underscore. Digits can only be used after the first character. Even though you may be able to use a non-standard table name, if you have the abililty to change the name of this table you should do so.
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Ошибка при insert'е даты в DBF-файл (C#) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]