创建 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软件。

有什么想法吗?

创建 dBase-file 偶尔会引发异常

您可能

想要做的是让"模板"表结构始终可用,并且永远不会在生产中使用。 然后,只需将该模板表复制到新表名称所需的任何名称即可。 然后,您可以查询和连接并对该文件版本执行任何操作。 此外,还可以从 重命名文件扩展名。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();
}