在 C# 中使用 OLEDB 为 dBASE IV 崩溃创建 DBF

In C# Creating DBF Using OLEDB for dBASE IV Crashes

我的代码在下面,任何时候我 运行 单元测试(或实际应用程序)都会停止执行测试(尽管下面的代码包含在 try catch 和断点中捕获)。

生成的文件有严重性和消息字段,但没有其他字段。我间歇性地看到这个 运行,但是,我似乎无法让它再次工作。

//DBF Create Table
var currentLogTime = DateTime.UtcNow.ToString("yyMMddHH");
protected const string FORMAT_CONNECTION_STRING = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV";
var connectionString = String.Format(FORMAT_CONNECTION_STRING, DBFPath);
Connection = new OleDbConnection(connectionString);
Connection.Open();
using (var command = Connection.CreateCommand())
{
    command.CommandText =
        String.Format(
            "CREATE TABLE {0} ([SEVERITY] NUMERIC, [MESSAGE] MEMO, [STACKTRACE] MEMO, [OCCURRED] CHAR(50))",
            currentLogTime);
    try
    {
        command.ExecuteNonQuery();
    }
    catch(Exception ex)
    {

    }
}

这可能是因为您只在日期数字上创建了 table。您不能创建一个 table,例如 "yyMMddHH",它可能看起来像 16021715。尝试使用您的日志前缀创建您的 table,例如...

String.Format("CREATE TABLE Log{0} (etc.....", parm);

所以 table 名称实际上会变成 "Log16021715" 并且是一个有效的 table 名称。

VisualFoxPro CreateTable

var currentLogTime = DateTime.UtcNow.ToString("yyMMddHH");
protected const string FORMAT_CONNECTION_STRING = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV";

var connectionString = String.Format(FORMAT_CONNECTION_STRING, DBFPath);
Source="yourFilePathToSourceFile";Extended Properties=dBase IV";
using (OleDbConnection connection = new OleDbConnection(connectionString))
using (OleDbCommand command = connection.CreateCommand())
{
    connection.Open();
    command.CommandText = String.Format("CREATE TABLE {0} (SEVERITY I, MESSAGE M, STACKTRACE M, OCCURRED C(50) NOCPTRANS"
    command.ExecuteNonQuery();
}

OleDB 驱动程序在为 MEMO 字段创建 DBT 文件时似乎遇到了最大路径长度问题。缩短路径可以解决问题。