创建 dBase-file 偶尔会引发异常
本文关键字:异常 dBase-file 偶尔 创建 | 更新日期: 2023-09-27 18:34:37
我在导出形状文件数据时无法创建 dbf 文件。大多数情况下它可以工作,但有时它只会显示以下错误,即使该文件尚不存在:
Microsoft Jet 数据库引擎无法打开文件 'C:''Test''258ba2f1-cc05-4a21-a047-ef060c46a3ca''data''tablename。DBF'。 它已由其他用户独占打开,或者您需要权限才能查看其数据。
代码如下所示:
using (var dBaseConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + databasePath + ";Extended Properties=dBASE IV;"))
{
var createTableString = "Create Table " + tableName + ".dbf (p_id char(10), answered char(20), mnote char(50), descr char(50), grade char(50))";
var cmd = new OleDbCommand(createTableString, dBaseConnection);
dBaseConnection.Open();
cmd.ExecuteNonQuery();
这仅在我使用 Jet 数据库引擎Microsoft发生。使用Visual FoxPro创建一个名为"_NullFlags"的附加列,并且dbf文件不适用于任何GIS软件。
有什么想法吗?
您可能
想要做的是让"模板"表结构始终可用,并且永远不会在生产中使用。 然后,只需将该模板表复制到新表名称所需的任何名称即可。 然后,您可以查询和连接并对该文件版本执行任何操作。 此外,还可以从 重命名文件扩展名。DBF到任何东西,例如YourTable.GISDBF,所以没有其他应用程序会意外打开它。
但是,如果这对您不起作用,您可能想看看我不久前回答的另一篇帖子,也是喷气发动机的问题。 在这种情况下,我正在使用VFP OleDb驱动程序并使用ExecScript((。 您可以编写命令行语句,然后像执行程序一样执行它们。 就创建表而言,您始终可以执行一些操作,例如创建CURSOR,然后将"TYPE FOXPLUS"复制到目标表,这会将其转换为较旧的受支持文件格式,GIS也可以读取该格式。
string VFPScript = "ExecScript( "
+ "[create cursor C_Tmp ( fld1 i, fld2 c(50), fld3 c(10) )] +chr(13)+chr(10)+ "
+ "[copy to '" + YourFileNameVariable + "' type FoxPlus] ";
// put this script into command object, then execute it...
using (OleDbCommand comm = new OleDbCommand( VFPScript, connection))
{
comm.ExecuteNonQuery();
}