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

时间:2016-02-17 21:02:56

标签: c# oledb dbf dbase

我的代码如下所示,每次运行单元测试(或实际应用程序)时,它都会停止执行测试(尽管下面的代码包含在try catch和catch中的断点)。

生成的文件包含Severity和Message的字段,但没有其他字段。我已经间歇地看到了这种情况,但是,我似乎无法让它再次运转。

//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)
    {

    }
}

3 个答案:

答案 0 :(得分:0)

这可能是因为你正在创建一个关于日期数字的表格。您无法创建表格,例如" yyMMddHH"这可能看起来像16021715.尝试使用日志的前缀创建表,例如......

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

所以表名实际上会成为" Log16021715"并且是一个有效的表名。

答案 1 :(得分:0)

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();
}

答案 2 :(得分:0)

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