INSERT INTO 语句包含以下未知字段名称:'NoName'
The INSERT INTO statement contains the following unknown field name: 'NoName'
INSERT INTO
语句包含以下未知字段名称:
'NoName
'. Make sure you have typed the name correctly, and try the
operation again.
这是我尝试从我正在处理的 .Net
应用程序中将记录插入 dbase
文件 (.dbf
) 时抛出的错误。
我这样使用 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)
应用程序创建。
不要将问号与命名参数结合使用,即使是 @param1
等。如果要在此 table 中插入三个值,则在命令文本中命名参数:
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();
}
您非常接近,但您可能失败的是告诉您要插入哪些列的值。是的,OleDB 使用“?”作为参数的占位符,它们必须匹配相同的顺序作为它们相应需要的 SQL select、insert、update 或 delete。在 "Values" 子句之前添加显式列。
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.
不需要命令语句中的半结束符,因为无论如何您只有一个插入命令。
您自己对参数的实际命名没有问题,但参数的顺序与“?”特别相关。插入语句中的占位符。
我查了半天才发现,字段名超过8、9个字符的表都会出现这种情况。当其长度为 10 个或更多字符时,字段名称 returns 'NoName'。
听起来很可笑。
当我缩短字段名称时,效果很好。
我对此有了一些了解here
现在调整了字段名后,我上面的示例代码就可以完美运行了。
INSERT INTO
语句包含以下未知字段名称:
'
NoName
'. Make sure you have typed the name correctly, and try the operation again.
这是我尝试从我正在处理的 .Net
应用程序中将记录插入 dbase
文件 (.dbf
) 时抛出的错误。
我这样使用 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)
应用程序创建。
不要将问号与命名参数结合使用,即使是 @param1
等。如果要在此 table 中插入三个值,则在命令文本中命名参数:
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();
}
您非常接近,但您可能失败的是告诉您要插入哪些列的值。是的,OleDB 使用“?”作为参数的占位符,它们必须匹配相同的顺序作为它们相应需要的 SQL select、insert、update 或 delete。在 "Values" 子句之前添加显式列。
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.
不需要命令语句中的半结束符,因为无论如何您只有一个插入命令。
您自己对参数的实际命名没有问题,但参数的顺序与“?”特别相关。插入语句中的占位符。
我查了半天才发现,字段名超过8、9个字符的表都会出现这种情况。当其长度为 10 个或更多字符时,字段名称 returns 'NoName'。 听起来很可笑。 当我缩短字段名称时,效果很好。
我对此有了一些了解here
现在调整了字段名后,我上面的示例代码就可以完美运行了。