不断抛出错误,我不知道为什么

本文关键字:我不知道 为什么 错误 出错 | 更新日期: 2023-09-27 18:35:50

我正在尝试在数据表中搜索非唯一值,但不断收到此错误

筛选器表达式"PROV_NEW"的计算结果不为布尔项。

当我运行它时。

这是我的代码:

public class GetData
{
    datalogiclayer.TableSetup dal;
    DataSet ds;
    public delegate void InvalidTableDataDelegate(string ErrorMessage);
    public event InvalidTableDataDelegate InvalidTableData;
    public delegate void SetupDataLoadedDelegate(System.Data.DataSet dv, string TableName);
    public event SetupDataLoadedDelegate SetupDataLoaded;
    public GetData()
    {
        dal = new datalogiclayer.TableSetup();
    }
    public void Update(DataSets.Setup ds)
    {
        try
        {
            string errMsg = string.Empty;
            if (ValidateTable(ds.SETUP_MWPROV, out errMsg))
            {
                dal.UpdateDatabase(ds);
            }
            else
            {
                if (InvalidTableData != null)
                    InvalidTableData(errMsg);
            }
        }
        catch (Exception)
        {
            throw;
        }
    }
    private bool ValidateTable(DataSets.Setup.SETUP_MWPROVDataTable dt, out string TableIssues)
    {
        try
        {
            //NewCode not used for other row
            DataRow[] result = dt.Select("PROV_NEW = ''");
            DataRow[] dupresults = dt.Select("PROV_NEW");
            TableIssues = string.Empty;
            DataTable dtTemp = dt.DefaultView.ToTable(true, "NEW_PROV");
            if (dupresults.Length == 0)
            {
                return true;
            }
            else
            {
                IEnumerable<DataRow> uniqueCodes = dupresults.AsEnumerable().Distinct(DataRowComparer.Default);
                Console.WriteLine("Unique Provider Codes:");
                foreach (DataRow NEW_PROV in uniqueCodes)
                {
                    Console.WriteLine(NEW_PROV.Field<Int32>("PROV_NEW"));
                }
                return false;
            }          
        }
        catch (Exception)
        {
            throw;
        }
    }
}

因此,如您所见,我让它在数据表中搜索唯一行,当引发异常时是我实际保存数据时。它给出了上面的错误。

不断抛出错误,我不知道为什么

        DataRow[] dupresults = dt.Select("PROV_NEW");

dt.Select的参数是一个筛选器。 "PROV_NEW"不是有效的筛选器,因为表达式不会生成布尔值。我相信您将其与SQL混淆了,您可以在SQL中要求它选择单个列。但是您不需要这样做,因为稍后您需要从PROV_NEW列中选择不同的。如果你想确保整行是不同的,那么这就是你需要做的。

如果只想比较PROV_NEW列,则可以编写一个仅查看PROV_NEW列的自定义相等比较器。当您使用>此版本<调用distinct时,可以引用自定义比较器。>

或者,Grant Winney 建议您可以使用 Linq 在使用非重复列之前仅选择单个列。请参阅其答案中的注释。

检查代码中的以下行:

DataRow[] dupresults = dt.Select("PROV_NEW");

你的意思是在PROV_NEW之后放另一个值吗?你在上面的行中做对了,所以我假设这只是一个错误。有时第二双眼睛会有所帮助。:)

看起来这一行是错误的:

DataRow[] dupresults = dt.Select("PROV_NEW");

数据表需要筛选器表达式作为参数,而"PROV_NEW"不是筛选器表达式。有关详细信息,请参阅 MSDN 文档。

检查表达式 "PROV_NEW" 的结果。在某处,某个方法正在寻找生成的布尔类型,而您的表达式正在生成其他内容。我的2美分:)