エラー対応する親の値が指定されてない値があるため、この制約を有効にできません。

 

首先建立两个表一个父表,一个子表

父表

CREATE TABLE [T2] (
[a] [varchar] (50) NULL ,
[b] [int] NOT NULL ,
[c] [int] NOT NULL ,
CONSTRAINT [PK_T2] PRIMARY KEY CLUSTERED
(
   [c],
   [b]
) ON [PRIMARY]
) ON [PRIMARY]
GO

子表

CREATE TABLE [T3] (
[c] [int] NOT NULL ,
[d] [int] NULL ,
CONSTRAINT [PK_T3] PRIMARY KEY CLUSTERED
(
   [c]
) ON [PRIMARY]
) ON [PRIMARY]
GO
向父表和子表分
插入数据

insert into t2(a,b,c)
select 'b',6,1
union all
select 'a',1,2
union all
select 'c',5,3

insert into t3(c,d)
select 2,88

到此时为止我插入的数据都是正常数据,即 于共同列名C而言,父表T2包含了T3C的全部

数据正常,利用DataRelation正常操作如下:

     DataSet public_ds =new DataSet();
     SqlConnection conn =new SqlConnection("server=.;Initial Catalog=a; User ID =sa; Password=sa");
     SqlCommand cmd=new SqlCommand("select * from t2",conn);
     sda=new SqlDataAdapter(cmd);
     sda.Fill(public_ds, "aa");
     string strsql="select * from t3";
     sda= new SqlDataAdapter(strsql,conn);
     sda.Fill(public_ds,"bb");
     DataRelation dr = new DataRelation("ab",public_ds.Tables["aa"].Columns["c"],public_ds.Tables["bb"].Columns["c"]);
   
     public_ds.Relations .Add(dr);
     this.dataGrid1.SetDataBinding(public_ds,"aa");

到此后都是正确的。

下面我T3表当成父表,T2主表,同样执行上述代,不过红色部分要替换为下述句:    

DataRelation dr = new DataRelation("ab",public_ds.Tables["bb"].Columns["c"],public_ds.Tables["aa"].Columns["c"]);
  
这时就会出错误

如何解决呢,当然如果父表中的C列全部包含子表中C列数据再好不,但是现实中却往往不是这样的。

这时要用到createConstraints属性了。其DataRelation dr = new DataRelation("ab",public_ds.Tables["bb"].Columns["c"],public_ds.Tables["aa"].Columns["c"]);中我省略了一个参数,即createConstraints,它的值为Boolean,默不写省略的情况下True,如果我把它手false 上述不论谁为父表也不会抱了。

更改代如下:DataRelation dr = new DataRelation("ab",public_ds.Tables["bb"].Columns["c"],public_ds.Tables["aa"].Columns["c"]false);

如果置了createConstraints false 可以避免另一种错误的出 即これらの列には現在一意の値が含まれていません,该错误是如何出的呢?

把上述建立的表T2 清空重新插入数据

TRUNCATE table T2;

insert into t2(a,b,c)
select 'b',6,1
union all
select 'a',1,2
union all
select 'c',5,2

由于T2表是合主,所以次我C列有两行是相同即同2,此如果不createConstraints志的DataRelation dr = new DataRelation("ab",public_ds.Tables["bb"].Columns["c"],public_ds.Tables["aa"].Columns["c"]);就会出これらの列には現在一意の値が含まれていません的错误。当false后,错误消除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值