Инструкция insert into содержит неизвестное имя поля

The INSERT INTO statement contains the following unknown field name:

NoName‘. Make sure you have typed the name correctly, and try the
operation again.

That is the error thrown when I try to insert a record into a dbase file (.dbf) from a .Net app I am working on.

I use Oledb connection like this:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\David\Desktop\Dbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

I had similar issues while selecting. Some columns get returned as ‘NoName‘ but still with data. I simply use the column index number in place of the column name.

Now I need to insert and it has been a block. Same error comes up with say (when you don’t list out the column names):

INSERT INTO [tablename.dbf] VALUES (?, ?, ?);

Sample full code below:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\David\Desktop\Dbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

connection.Open();

OleDbTransaction trans = connection.BeginTransaction();
OleDbCommand command = new OleDbCommand(@"INSERT INTO [tablename.DBF] 
                                        VALUES
                                        (
                                        ?, ?, ?
                                        );", connection, trans);

command.Parameters.AddWithValue("param1", 7);
command.Parameters.AddWithValue("param2", "RCN");
command.Parameters.AddWithValue("param3", 0);

try
{
    command.ExecuteNonQuery();
    trans.Commit();
}
catch (Exception e)
{
    trans.Rollback();
    throw e;
}
finally
{
    connection.Close();
}

I have seen forums discuss this when it happens in Ms Access. But nothing much so far on dbase. Been thinking it is a driver thing.

The dbase file was created by dbase plus (2007) application.

Вопрос:

INSERT INTO содержит следующее неизвестное имя поля:

NoName “. Убедитесь, что вы правильно набрали имя и повторите операцию.

Это ошибка, возникающая при попытке вставить запись в файл dbase (.dbf) из приложения .Net, над которым я работаю.

Я использую Oledb соединение следующим образом:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\David\Desktop\Dbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

Во время выбора у меня были подобные проблемы. Некоторые столбцы возвращаются как ” NoName “, но все еще с данными. Я просто использую номер индекса столбца вместо имени столбца.

Теперь мне нужно вставить, и это был блок. Такая же ошибка возникает, если вы скажете (если вы не указали имена столбцов):

INSERT INTO [tablename.dbf] VALUES (?, ?, ?);

Пример полного кода ниже:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\David\Desktop\Dbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

connection.Open();

OleDbTransaction trans = connection.BeginTransaction();
OleDbCommand command = new OleDbCommand(@"INSERT INTO [tablename.DBF]
VALUES
(
?, ?, ?
);", connection, trans);

command.Parameters.AddWithValue("param1", 7);
command.Parameters.AddWithValue("param2", "RCN");
command.Parameters.AddWithValue("param3", 0);

try
{
command.ExecuteNonQuery();
trans.Commit();
}
catch (Exception e)
{
trans.Rollback();
throw e;
}
finally
{
connection.Close();
}

Я видел форумы обсуждать это, когда это происходит в Ms Access. Но ничего не осталось на dbase. Думал, что это вещь driver.

Файл dbase был создан приложением dbase plus (2007).

Лучший ответ:

Через некоторое время я узнал, что это произошло с таблицами с именем поля длиной более 8 или 9 символов. Когда его 10 или более символов длиннее, имя поля возвращает “NoName”. Это звучит смешно. Когда я сделал название поля короче, это сработало нормально.

Я понял это здесь

Теперь с настройками полей, мой примерный код выше работает отлично.

Ответ №1

Не используйте вопросительные знаки в сочетании с именованными параметрами, даже @param1 и т.д. Если вы вставляете три значения в эту таблицу, то укажите параметры в тексте команды:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\David\Desktop\Dbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

connection.Open();

OleDbTransaction trans = connection.BeginTransaction();
OleDbCommand command = new OleDbCommand(@"INSERT INTO [tablename.DBF]
VALUES
(
@param1, @param2, @param3
);", connection, trans);

command.Parameters.AddWithValue("param1", 7);
command.Parameters.AddWithValue("param2", "RCN");
command.Parameters.AddWithValue("param3", 0);

try
{
command.ExecuteNonQuery();
trans.Commit();
}
catch (Exception e)
{
trans.Rollback();
throw e;
}
finally
{
connection.Close();
}

Ответ №2

Вы очень близки, но то, что вы, вероятно, терпите неудачу, – это рассказывать о WHOCKH столбцах, которые вы вставляете в значения. Да, OleDB использует “?” как владельцы мест для параметров, и они должны совпадать с тем же порядком, что и их соответствующие потребности SQL, выбирать, вставлять, обновлять или удалять. Добавьте явные столбцы перед предложением “Значения”.

OleDbCommand command = new OleDbCommand(
@"INSERT INTO [tablename.DBF] ( tblColumn1, tblColumn2, tblColumn3 )
VALUES  ( ?, ?, ? )", connection, trans);

THEN add your parameters in the specific order to match the command.

Нет необходимости в закрытии полу в командном выражении, так как у вас была только одна команда вставки.

Фактическое присвоение параметров, как у вас было, было нормально для вашего собственного уточнения, но порядок параметров определенно коррелирован с “?” держателей мест в заявлении о вставке.

Logo
MurCode

  • Форумы
  • Поиск
  • О проекте

Вставка строк в таблицу

DDT

Дата: 14.04.2004 16:12:17

Вставляю в таблицу строку:

«INSERT INTO [Рассылка] VALUES(Наименование, Комерческое_наименование, Город)»

Но в таблице «Рассылка» есть еще одно поле — ID. Оно является счетчиком.

Каков должен быть запрос чтобы строка вставилась, а все ругается.

Alexander Popov

Дата: 14.04.2004 16:19:34

INSERT INTO [Рассылка] () В скобках указать в какие поля идет insert. И все должно работать.

АлексейК

Дата: 14.04.2004 16:19:42

INSERT INTO [Рассылка] (Наименование, Комерческое_наименование, Город)VALUES(Наименование, Комерческое_наименование, Город)

DDT

Дата: 14.04.2004 16:24:49

И так я пробовал.

Отвечает:

Инструкция INSERT INTO содержит неизвестное имя поля ‘Наименование’. Проверьте, что имя поля задано без ошибок, и повторите операцию.

Kelme

Дата: 14.04.2004 16:33:16

INSERT INTO [Рассылка] VALUES('Наименование', 'Комерческое_наименование', 'Город') 

DDT

Дата: 14.04.2004 16:42:05

Говорит:

Не совпадает число значений запроса и число результирующих полей.

Да, потом, кавычки не пойдут, т.к. мне надо вставлять значения полей формы.

Kelme

Дата: 14.04.2004 16:47:02

а вниметельно прочесть то, что АлексейК и Alexander Popov написали слабо? ;)

DDT

Дата: 14.04.2004 16:48:40

Нет не слабо.

Все всем спасибо. Это называется «конец дня». Ничего не соображаю. Оказывается вставляю не в ту таблицу :) Ведь бывает же такое.

Спасибо всем за содействие и понимание.

 
Мальчик
 
(2012-02-29 17:14)
[0]

Здравствуйте.

Столкнулся с проблемой при работе с ADO. Установил соединение с DBF,
выполняю INSERT. Работает. Но, если имя поля в таблице «Names»
добавление не выполняется. Ошибка синтаксиса Insert into. Я так понял, поле с зарезервированным именем. Но мне просто необходимо сажать именно в это поле.

qMain.SQL.Text := «insert into mtk.dbf (NAMES) values (:ns)»;
qMain.Parameters.ParamByName(«ns»).Value      := «Тест»;
qMain.ExecSQL;

Подскажите как быть?

Сторонние компоненты использовать мне нельзя, BDE тоже.


 
Ega23 ©
 
(2012-02-29 17:15)
[1]

qMain.SQL.Text := "insert into mtk.dbf ("NAMES") values (:ns)";
?


 
Delphi2007
 
(2012-02-29 17:19)
[2]


> qMain.SQL.Text := «insert into mtk.dbf («NAMES») values
> (:ns)»;
> ?
>

«Инструкция INSERT INTO содержит неизвестное имя поля «»NAMES»».  Проверьте, что имя задано без ошибок, и повторите операцию».


 
sniknik ©
 
(2012-02-29 17:19)
[3]

> с зарезервированным именем.
такие имена, а также с пробелами и т.д. нестандартные, экранируются кавычками (или другими символами в зависимости от движка), попробуй [Names].

> BDE тоже.
ты его уже используешь. просто «с широко закрытыми глазами».


 
Delphi2007
 
(2012-02-29 17:22)
[4]


> такие имена, а также с пробелами и т.д. нестандартные, экранируются
> кавычками (или другими символами в зависимости от движка),
>  попробуй [Names].

То, что нужно. Спасибо.


 
Anatoly Podgoretsky ©
 
(2012-02-29 17:36)
[5]

Или так

qMain.SQL.Text := "insert into mtk.dbf ("NAMES") values (:ns)";

или так
qMain.SQL.Text := "insert into mtk.dbf ([NAMES]) values (:ns)";

Какой подойдет, в зависимости от провайдера


 
Delphi2007
 
(2012-02-29 17:38)
[6]

Подскажите пожалуйста как настраивать кодировку. Я сейчас сажаю данные с кириллицей, а они не читабельны в FoxPro. Нужно прописывать в строке соединения или при передаче параметров менять кодировку?


 
Ega23 ©
 
(2012-02-29 17:38)
[7]

ИМХО, надо ноги за такие наименования отстреливать.
Костыли на ровном месте.
Впрочем, тема для холивара.


 
Ega23 ©
 
(2012-02-29 17:39)
[8]


> Подскажите пожалуйста как настраивать кодировку. Я сейчас
> сажаю данные с кириллицей, а они не читабельны в FoxPro.
>  Нужно прописывать в строке соединения или при передаче
> параметров менять кодировку?

И Collation настраивать.


 
Delphi2007
 
(2012-02-29 17:40)
[9]


> ИМХО, надо ноги за такие наименования отстреливать.
> Костыли на ровном месте.
> Впрочем, тема для холивара.

У нас нет выбора, нужно отправлять данные в ведомство где требуют именно в таком формате.


 
Anatoly Podgoretsky ©
 
(2012-02-29 17:43)
[10]


> Delphi2007   (29.02.12 17:38) [6]

Неизвестна ни версия СУБД, ни провайдер, ни версия «dbf»
Ничего неизвестно


 
Anatoly Podgoretsky ©
 
(2012-02-29 17:44)
[11]


> У нас нет выбора, нужно отправлять данные в ведомство где
> требуют именно в таком формате.

Тогда вопроса нет, нельзя, так нельзя


 
Delphi2007
 
(2012-02-29 17:50)
[12]


> Неизвестна ни версия СУБД, ни провайдер, ни версия «dbf»
> Ничего неизвестно

dBase IV.

Строка соединения: Provider=Microsoft.JET.OLEDB.4.0;Data Source=D:\;Extended Properties=dBase IV;


 
Smile
 
(2012-02-29 17:55)
[13]

Может кто-нить подскажет какой сейчас год на дворе?
Заранее спасибо:)


 
Anatoly Podgoretsky ©
 
(2012-02-29 17:58)
[14]

> Delphi2007  (29.02.2012 17:50:12)  [12]

В данной СУБД нет кодировки для dBase IV, она машинная


 
sniknik ©
 
(2012-02-29 18:05)
[15]

надо поставить OEM в Jet (в реестре), + если используется «внешний» BDE (установлен и настроено на него) то в нем у драйвера поставить «без кодировки» ansi вроде бы.


#ms-access #coldfusion #insert #ms-jet-ace

#ms-access #coldfusion #вставить #ms-jet-ace

Вопрос:

Я использую Coldfusion 9,0,0,251028 в 64-разрядной версии Windows 7 с базой данных Microsoft Access 97.

Когда я запускаю этот запрос:

 <cfquery name="put_in_info" datasource="#db#">

      insert into news

                  (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat)

      values

  (1,1, #createodbcdate(now())#, #createodbctime(now())#, '#subject#', '#message#',1, #session.expdate#)

</cfquery>
  

Я получаю эту ошибку:

 Error Executing Database Query.

[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] The INSERT INTO statement contains the following unknown field name: 'exp_dat'. Make sure you have typed the name correctly, and try the operation again.   The error occurred in H:Inetpubpvalert.comlistserveradmintemplatespost_breaking.cfm: line 26
Called from H:Inetpubpvalert.comlistserveradminnew_process.cfm: line 54
Called from H:Inetpubpvalert.comlistserveradmintemplatespost_breaking.cfm: line 26
Called from H:Inetpubpvalert.comlistserveradminnew_process.cfm: line 54

24 :      (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat)

25 :   values

26 :   (1,1, #createodbcdate(now())#, #createodbctime(now())#, '#subject#', '#message#',1, #session.expdate#)

27 :    </cfquery>

28 :

VENDORERRORCODE


  -1507

SQLSTATE


  HYS22

SQL


   insert into news (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat) values (1,1, {d '2011-04-11'}, {t '17:49:09'}, 'Test message - please ignore', 'This is a test message, please ignore. ',1, {ts '2011-05-15 00:00:00'})

DATASOURCE


  rpv_list
  

Exp_dat — это столбец даты истечения срока действия в таблице, который мне нужно обновить.

Я попытался удалить «session.» в переменной expdate, и это ничего не дало. Аналогично для удаления любых пробелов вокруг строки 24 «exp_dat».

Ответ №1:

В приведенном сообщении об ошибке не содержится жалоб на вставленное значение. В ней говорится, что поле «exp_dat» не существует в вашей таблице / просмотре «новости».

Первое, что нужно сделать, это дважды проверить, действительно ли существует поле с именем «exp_dat». Если у вас нет прямого доступа к базе данных, просто запустите запрос из ColdFusion и сбросьте результат запроса.

 <cfquery name="getSomeRowsFromNewsTable" datasource="#db#" maxrows="10">
select * from news
</cfquery>
<cfdump var="#getSomeRowsFromNewsTable#" abort="true">
  

Возможно, кто-то присвоил полю псевдоним, или не включил существующее поле в представление, или оно называется «exp_dattim», или …

Комментарии:

1. Я запустил инструкцию select, которая получает все строки, а затем: <cfdump var=»#get_info.columnlist #»> и получил: DISPLAY, EXP_DAT , ID, IS_CURRENT, MES_DAT, MES_SUB, MES_TEXT, MES_TIM, SCROLLSHOW, Поэтому кажется, что столбец действительно существует

2. @BarrettChamberlain ваш комментарий противоречит тому, что v принимает ответ .., Можете ли вы рассказать нам, что на самом деле решило проблему? Чувствительность к верхнему / нижнему регистру в имени поля?

Ответ №2:

Задан запрос на вставку, такой как

 INSERT INTO tblname ('column1', 'column2', 'column3' ...) VALUES ...
  

Попробуйте использовать квадратные скобки — это [] — вокруг имен столбцов, вот так:

 INSERT INTO tblname ([column1], [column2], [column3] ...) VALUES ...
  

Это сработало для меня в интерпретаторе Access SQL GUI, но может не решить конкретную ситуацию OP (Coldfusion и т.д.).

Ответ №3:

Я несколько раз сталкивался с этими проблемами в MS Access. Я знаю, что имя столбца написано правильно и что столбец существует. Например, я могу без проблем выполнить ‘SELECT’ в столбце, но когда я пытаюсь выполнить простую вставку SQL, я получаю эту ошибку: «… Неизвестное имя поля » Я ничего не вводил, просто использовал копирование и вставку, поэтому нет никаких шансов на опечатку. Access буквально распознает имя столбца в инструкции SELECT и НЕ распознает это же имя столбца при попытке вставки.

Похоже, это ошибка в MS Access 2010.

Комментарии:

1. Я могу подтвердить эту ошибку и в 2007 году. Как я обошел ошибку, я заметил, что Access любезно переименовал столбец в конструкторе запросов в то, что он хотел, чтобы это было. Если бы я изменил имя столбца в таблице, чтобы оно соответствовало этому, то запрос Insert выполнялся бы просто отлично.

Ответ №4:

Попробуйте обернуть каждое значение, которое вы вставляете в свою инструкцию insert, одним quotes.ie '#variable#', '#another_var#' — и так далее. Я думаю, что у меня была такая же проблема, но это исправило ее.

Понравилась статья? Поделить с друзьями:
  • Инструкция rb600 nice на русском
  • Инструкция samsung gear 360 sm c200
  • Инструкция insert exec не может быть вложенной
  • Инструкция samsung galaxy watch 4 classic
  • Инструкция razer kraken x lite