不断抛出错误,我不知道为什么
本文关键字:我不知道 为什么 错误 出错 | 更新日期: 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美分:)