您好我正在使用Visual Studio 2008中的报表。我使用下面的查询来创建数据集。当我测试查询时,这在SQL / SMSS和数据集中正常工作。
SELECT
CASE WHEN Make LIKE 'FO%' THEN 'Ford'
WHEN Make LIKE 'HON%' THEN 'Honda'
END Make,
CASE WHEN model LIKE 'CIV%' THEN 'Civic'
WHEN model LIKE '%AC%' THEN 'Accord'
ELSE model
END model,
year, AVG(Fuel.MPG) as AVGMPG
From cars, Fuel
Where Fuel.ID=cars.ID
AND year > 2003
AND Make is not NULL
AND model is not NULL
AND year is not NULL
Group by Make, model, year
当我有报告引用数据集时,它会生成以下错误;
报告处理期间发生错误。例外已经存在 由调用目标抛出。无法启用约束。 一行或多行包含违反非null,唯一或的值 外键约束。
由于实际的SQL语句较大且涉及多个CASE语句,所有这些语句都有效,我将其缩小到语句的else部分。
对于背景,我试图从模型中提取所有数据,但将某些相似的值分组,但仍然会拉出其余的数据。
答案 0 :(得分:0)
我最好的猜测是,对于某些行,model
列包含null
,而报告中的数据集不允许null
列值。
答案 1 :(得分:0)
SELECT
CASE WHEN Make LIKE 'FO%' THEN 'Ford'
WHEN Make LIKE 'HON%' THEN 'Honda'
END Make
如果没有默认情况,您最终会收到错误消息。将其更改为
SELECT
CASE WHEN Make LIKE 'FO%' THEN 'Ford'
WHEN Make LIKE 'HON%' THEN 'Honda'
ELSE ''
END Make
以下是查找错误列和实际错误的快速方法:
var ds = new DataSet();
ds.EnforceConstraints = false;
/* Fill dataset */
try {
ds.EnforceConstraints = true;
} catch {
foreach (DataTable tbl in ds.Tables) {
if (tbl.HasErrors) {
foreach (DataRow row in tbl.GetErrors()) {
foreach (DataColumn col in row.GetColumnsInError() {
row.GetColumnError(col);
}
}
}
}
}