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

在C#中,为dBASE IV崩溃使用OLEDB创建DBF,c#,oledb,dbf,dbase,C#,Oledb,Dbf,Dbase,下面是我的代码,每当我为此运行单元测试(或实际应用程序)时,它都会停止执行测试(尽管下面的代码包装在一个try catch和catch中的一个断点中) 结果文件有一个严重性和消息字段,但没有其他字段。我看到过这种间歇运行,但是,我似乎无法让它再次工作 //DBF Create Table var currentLogTime = DateTime.UtcNow.ToString("yyMMddHH"); protected const string FORMAT_CONNECTION_STRIN

下面是我的代码,每当我为此运行单元测试(或实际应用程序)时,它都会停止执行测试(尽管下面的代码包装在一个try catch和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)
    {

    }
}

这可能是因为您正在创建一个仅基于日期数字的表。无法创建类似“yyMMddHH”的表,该表可能看起来像16021715。尝试使用日志的前缀创建表,例如

String.Format("CREATE TABLE Log{0} (etc.....", parm);
因此,表名实际上将变成“Log16021715”,并且是一个有效的表名。


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

那么,您在W上看到的是什么类型的错误。。另外,围绕
命令的try{}catch{}代码在哪里。ExecuteOnQuery
您是否尝试过将
使用(var command=Connection.CreateCommand(sqlCmd,conn))
替换为
使用(var command=new OleDbCommand())
设置
command.CommandType=CommandType.Text您是否也使用了调试器来单步执行代码。。?另外,为什么不创建一个更合理的表名,而不是基于某些格式化的utc日期值。使用
使用(var command=new OleDbCommand())
没有任何区别。是的,我尝试过单步执行它,每次它点击
command.ExecuteNonQuery()visual studio停止调试(在我的计算机上以及我办公室的其他人上)。我有一个关于这是包含在更大的代码块的尝试捕获。。。这是永远不会被绊倒的。当我执行F10(单步执行)命令时。ExecuteOnQuery();它每次都崩溃并停止调试。至于表名,我已经将其设置为固定的名称,它没有任何区别。它使一个DBF文件只包含我的几个列。路径正确,它实际上使一个DBF文件包含严重性和消息。为什么VisualStudio会崩溃而不是调试。为什么不创建STACKTRACE的另外两个字段,并且发生了错误?我更改了列名,这似乎没有改变任何东西。我已更改连接/命令样式。。。无差异。更新问题以反映最新更改。没有区别。仍然只使用前2个字段创建DBF,visual studio在单步执行
命令时停止调试。ExecuteOnQuery()
。是否尝试过为数值字段和字符字段指定字段宽度将名称改为:
创建表L16021721([严重性]数值,[消息]备忘录,[堆栈跟踪]备忘录,[发生]字符(50))
没有什么区别。问题是一样的。这应该对你有用。。为什么不在不使用string.Format函数的情况下尝试它呢?这应该可以使用
创建表L16021721([SEVERITY]NUMERIC,[MESSAGE]MEMO,[STACKTRACE]MEMO,[Occurrent]CHAR(50))
即将出现,并说MESSAGE是DBase中的保留关键字,因为没有区别。同样的“停止调试”,DBF中只有2列。@Binary,让我问你这个。。。它必须是dBASE IV吗?如果不是,我会强烈考虑使用微软Visual FoxPro OLED适配器代替JET。VisualFoxpro不是Access,而是.DBF,这是dBASeIV,不是Access。
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();
}