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

C# .NET Core调用BCP导入CSV到本地SQL Server出现0行复制问题

C#调用BCP导入CSV到SQL Server异常问题分析

前提说明:已提前在SQL Server的master库中创建了名为AzureBlob的空表,共2列,无存量数据,待导入的CSV文件为2列测试数据。

问题现象

原有代码运行后输出Starting Copy,提示0 rows copied,目标SQL表无数据写入。

问题原因

  • BCP方向参数使用错误:out是将SQL表数据导出到文件的参数,从CSV导入到SQL表需要使用in参数
  • 数据库实例地址格式错误:-S .\\参数不完整,本地默认实例直接写-S .即可,命名实例需要补全为-S .\\实例名(如-S .\\SQLEXPRESS)
  • 缺少分隔符指定:BCP默认使用制表符作为列分隔符,若CSV为逗号/空格分隔,需要显式指定分隔符参数
  • 未跳过表头行:CSV第一行是表头,BCP默认从第一行开始导入,表头行字段类型和表不匹配会被丢弃

修复后的代码示例

static void Main(string[] args)
{
    // 参数说明:in表示文件导入到表,-t , 指定逗号分隔,-F 2 跳过表头行
    string strCmdText = "/C bcp master..AzureBlob in C:\\data\\blbTest.csv -S . -c -C RAW -T -t , -F 2";
    Process process = new Process();
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = strCmdText;
    // 开启输出重定向方便排查错误
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;
    startInfo.UseShellExecute = false;
    process.StartInfo = startInfo;
    process.Start();
    // 读取运行日志便于排查
    string output = process.StandardOutput.ReadToEnd();
    string error = process.StandardError.ReadToEnd();
    Console.WriteLine(output);
    if(!string.IsNullOrEmpty(error)) Console.WriteLine("错误信息:"+error);
    process.WaitForExit();
    process.Close();
    process.Dispose();
}

额外排查要点

  • 确认CSV文件路径正确,程序运行身份拥有该路径的读取权限、SQL库的写入权限
  • 确认SQL表的字段顺序、数据类型和CSV列完全匹配,避免类型转换失败导致行被丢弃
  • 若CSV列之间是多空格分隔,建议先预处理为逗号/制表符等统一分隔符后再执行导入
  • 可以先在cmd窗口直接运行修改后的BCP命令验证导入逻辑正确,再放到C#代码中执行,降低排查复杂度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:27:03