INSERT INTO
语句包含以下未知字段名称:
'
NoName
&#39 ;.确保您已正确输入名称,然后尝试 再次运作。
当我尝试从我正在处理的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)
应用程序创建。
答案 0 :(得分:0)
不要将问号与命名参数结合使用,甚至@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();
}
答案 1 :(得分:0)
你非常接近,但你可能失败的是告诉你要插入值的WHICH列。是的,OleDB使用"?"作为参数的占位符,它们必须匹配与SQL select,insert,update或delete的相应需求相同的顺序。在"值"之前添加显式列。子句。
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.
不需要在命令语句中关闭半部分,因为无论如何只有一个插入命令。
您所拥有的参数的实际命名可以自行澄清,但参数的顺序与"?"插入声明中的占位符。
答案 2 :(得分:0)
经过很长一段时间后,我发现这发生在字段名长度超过8或9个字符的表中。当其长度超过10个字符时,字段名称将返回“NoName'”。 这听起来很荒谬。 当我把字段名称缩短时,这很好。
我对此here
有所了解现在调整了字段名,我上面的示例代码完美无缺。