technofantasy

博客园 首页 新随笔 联系 订阅 管理
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,因为没有约束
所以就没有问题了。
posted on 2006-08-16 23:31  陈锐  阅读(1095)  评论(1编辑  收藏  举报