You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# .NET生成DBF文件服务器端仅支持8.3命名的解决方法

解决DBF文件长文件名在服务器上被截断为8.3格式的问题

核心原因

你当前连接字符串中指定的dBASE III是老旧格式,本身仅支持8.3命名规则,这是服务器上生成的DBF文件名被截断的根本原因。本地环境可能因兼容或驱动隐式处理支持了长文件名,但服务器环境严格遵循格式规范。

解决方案

  1. 修改连接字符串的Extended Properties
    将Extended Properties=dBASE III;替换为支持长文件名的格式,推荐使用dBASE IV或Visual FoxPro(后者对长文件名支持更完善):
// 使用dBASE IV格式
using (var dBaseConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBFPath + ";Extended Properties=dBASE IV;"))
// 或使用Visual FoxPro格式(需服务器驱动支持)
// using (var dBaseConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBFPath + ";Extended Properties=Visual FoxPro;"))
  1. 验证服务器驱动环境
    确认服务器上安装的Microsoft ACE OLEDB驱动是对应架构(32/64位)的完整版本,虽然ODBC版本一致,但驱动的系统注册状态可能影响格式支持。

  2. 修复代码SQL注入风险(额外建议)
    你当前直接拼接SQL语句的写法存在严重注入风险,建议改为参数化查询:

using (var dBaseConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBFPath + ";Extended Properties=dBASE IV;"))
{
    dBaseConnection.Open();
    string createTableSql = @"CREATE TABLE " + FileNameBase + FileNameSuffix + " (NKAZON char(244), ADOSZAM char(244), DATUM char(244), GYNEV char(244), TTT char(244), TKSZAM char(244), KSZ char(244), NYITO char(244), BESZ char(244));";
    using (var createCmd = new OleDbCommand(createTableSql, dBaseConnection))
    {
        createCmd.ExecuteNonQuery();
    }

    string insertSql = @"INSERT INTO " + FileNameBase + FileNameSuffix + " (NKAZON, ADOSZAM, DATUM, GYNEV, TTT, TKSZAM, KSZ, NYITO, BESZ) VALUES (@NKAZON, @ADOSZAM, @DATUM, @GYNEV, @TTT, @TKSZAM, @KSZ, @BESZ, @NYITO);";
    foreach (var item in ExportDBF)
    {
        using (var insertCmd = new OleDbCommand(insertSql, dBaseConnection))
        {
            insertCmd.Parameters.AddWithValue("@NKAZON", item.NKAZON);
            insertCmd.Parameters.AddWithValue("@ADOSZAM", item.ADOSZAM);
            insertCmd.Parameters.AddWithValue("@DATUM", item.DATUM.ToString("yyyyMM"));
            insertCmd.Parameters.AddWithValue("@GYNEV", item.GYNEV);
            insertCmd.Parameters.AddWithValue("@TTT", item.TTT);
            insertCmd.Parameters.AddWithValue("@TKSZAM", item.TKSZAM);
            insertCmd.Parameters.AddWithValue("@KSZ", item.KSZ);
            insertCmd.Parameters.AddWithValue("@BESZ", item.BESZ);
            insertCmd.Parameters.AddWithValue("@NYITO", item.NYITO);
            insertCmd.ExecuteNonQuery();
        }
    }
}

额外注意事项

  • 确认服务器文件系统(如NTFS)未被组策略限制长文件名支持(默认NTFS支持长文件名)。
  • 若使用Visual FoxPro格式,需确保服务器上的ACE驱动兼容该格式。

内容的提问来源于stack exchange,提问作者maruzsam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:14:55