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

使用SqlBulkCopy.WriteToServer()时如何忽略含空格的记录?

SqlBulkCopy.WriteToServer()时如何忽略含空格的记录?

看起来你已经搞定了NULL和重复值的处理,但空字符串(包括全是空格的情况)没被过滤掉对吧?这是因为DBNull.Value只对应数据库里的NULL,而CSV里的空值或者全空格在DataTable里是string.Empty或者带空格的字符串,不属于DBNull范畴,所以你的现有判断没覆盖到这类情况。

下面给你两个可行的解决方案:

方案一:修改现有删除逻辑,覆盖空字符串/全空格判断

把你原来的删除循环改成这样,同时检查字段是否为NULL、空字符串或者全空格:

for (int i = tblcsv.Rows.Count - 1; i >= 0; i--)
{
    // 先把字段值转成字符串(避免DBNull的情况)
    string name = tblcsv.Rows[i][0]?.ToString() ?? string.Empty;
    string email = tblcsv.Rows[i][1]?.ToString() ?? string.Empty;

    // 判断条件:NULL 或者 空/全空格字符串
    if (tblcsv.Rows[i][0] == DBNull.Value 
        || tblcsv.Rows[i][1] == DBNull.Value 
        || string.IsNullOrWhiteSpace(name) 
        || string.IsNullOrWhiteSpace(email))
    {
        tblcsv.Rows[i].Delete();
    }
}
tblcsv.AcceptChanges();

这里的string.IsNullOrWhiteSpace()方法会同时处理空字符串、全空格、制表符等各种空白字符的情况,正好匹配你的需求。

方案二:在CSV读取阶段就过滤无效行(更高效)

其实可以在把CSV行添加到DataTable之前就做校验,这样不用事后删除,效率更高,还能顺便清理字段的多余空格:

foreach (string csvRow in ReadCSV.Split('\n'))
{
    if (string.IsNullOrWhiteSpace(csvRow))
        continue; // 直接跳过空行

    string[] fileRecs = csvRow.Split(',');
    bool isRowValid = true;
    // 检查每个字段是否有效
    foreach (string rec in fileRecs)
    {
        if (string.IsNullOrWhiteSpace(rec))
        {
            isRowValid = false;
            break;
        }
    }

    if (isRowValid)
    {
        // 只有有效行才添加到DataTable,同时去掉字段前后空格
        tblcsv.Rows.Add();
        int count = 0;
        foreach (string FileRec in fileRecs)
        {
            tblcsv.Rows[tblcsv.Rows.Count - 1][count] = FileRec.Trim();
            count++;
        }
    }
}

这样一来,无效的行根本不会进入DataTable,后续就不用再做删除操作了。

额外小提醒

你的代码里有一处可能的错误:

tblcsv = tblcsv.DefaultView.ToTable(true, Name.Trim(), Email.Trim());

这里的Name和Email应该是字符串常量,要写成"Name"和"Email"才对(除非你定义了同名变量),修改后:

tblcsv = tblcsv.DefaultView.ToTable(true, "Name", "Email");

备注:内容来源于stack exchange,提问作者Valeso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:32:59