C# SQL Case语句在Visual studio报表中生成错误

C# SQL Case语句在Visual studio报表中生成错误,c#,sql,visual-studio-2008,dataset,C#,Sql,Visual Studio 2008,Dataset,您好,我目前正在Visual Studio 2008中处理一份报告。我使用下面的查询创建一个数据集。当我测试查询时,这在SQL/SMSS和dataset中正常工作 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%

您好,我目前正在Visual Studio 2008中处理一份报告。我使用下面的查询创建一个数据集。当我测试查询时,这在SQL/SMSS和dataset中正常工作

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、unique或 外键约束

由于实际的SQL语句更大,并且涉及多个CASE语句,所有这些语句都可以工作,因此我将其缩小到语句的else部分


作为背景,我试图从模型中提取所有数据,但对某些相似的值进行分组,但仍然提取其余的数据。

我的最佳猜测是,对于某些行,
model
列包含
null
,而报表中的数据集不允许列值为
null

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); 
            }  
         }  
      }  
   }  
}

在这个大查询中,我有一个Where语句,它的Model不为Null。这是否仍然会导致问题,因为这发生在案件之后?我将修改查询以显示整个范围。您好,到目前为止,make CASE似乎工作正常,但我会将其添加到查询中,以便在数据更改时不会出现其他问题。这个典型案例仍然给我带来麻烦。这就像默认情况下visual studio中的报表不起作用一样。我会尝试在visual studio项目中填充您的数据集,并使用
Datatable.GetErrors()
跟踪它。