VB 2005中拖放数据绑定确实很爽,只要在数据源中定义好数据源,然后从数据对象上拖放控件
到窗体就可以了。但是今天碰到一个问题,在库中有两个表:订单表和订单明细表。我在数据源
中创建了一个新的DataAdapter,它的Fill方法的SQL语句是:
SELECT 订单表.订单ID, 订单表.货主名称, 订单明细表.货物数量 * 订单明细表.货物单价 AS 总价格, 订单明细表.货物名称
FROM 订单表 INNER JOIN
订单明细表 ON 订单表.订单ID = 订单明细表.订单ID
但是将这个DataAdapter的DataGridView拖放到窗体,运行后确出现这样的错误:
"Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints."
但是上面的SQL语句在SQL Server中执行完全没问题,想了半天,后来看了看数据源的xsd文件,
看到有这样的约束:
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:订单表" />
<xs:field xpath="mstns:订单ID" />
</xs:unique>
会不会是这样的问题呢?将上面的SQL换一下:
SELECT 订单明细表.订单ID, 订单表.货主名称, 订单明细表.货物数量 * 订单明细表.货物单价 AS 总价格, 订单明细表.货物名称
FROM 订单表 INNER JOIN
订单明细表 ON 订单表.订单ID = 订单明细表.订单ID
果然运行通过了,数据约束有时候还真是麻烦,因为有了对订单表.订单ID的约束,因此前面的SQL
查询出来的结果订单表.订单ID字段值有重复就会报错,如果换成订单明细表.订单ID,因为没有约束
所以就没有问题了。
到窗体就可以了。但是今天碰到一个问题,在库中有两个表:订单表和订单明细表。我在数据源
中创建了一个新的DataAdapter,它的Fill方法的SQL语句是:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
但是将这个DataAdapter的DataGridView拖放到窗体,运行后确出现这样的错误:
"Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints."
但是上面的SQL语句在SQL Server中执行完全没问题,想了半天,后来看了看数据源的xsd文件,
看到有这样的约束:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
会不会是这样的问题呢?将上面的SQL换一下:
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
果然运行通过了,数据约束有时候还真是麻烦,因为有了对订单表.订单ID的约束,因此前面的SQL
查询出来的结果订单表.订单ID字段值有重复就会报错,如果换成订单明细表.订单ID,因为没有约束
所以就没有问题了。