类型化数据集奇怪行为的原因是什么?

问题描述:

我正在开发使用类型化数据集作为DAL一个asp.net网站,一切工作正常,直到今天我正要一些新的功能添加到我的网站 这里是摘要:从amount_field从USER_TABLE和计算类型化数据集奇怪行为的原因是什么?

GET量然后更新的东西USER_TABLE

这里是我的SQL查询的类型化的DataSet获得amount_field:

select userId , Amount from [user] WHERE [email protected] 

我命名此查询:getUserCreditByID(@userid)

在我BLL我把这个查询在这样的这样:

public static int getuseramount(long id) 
{ 
    int amount = 0; 
    userTableAdapters.userTableAdapter usert = new userTableAdapters.userTableAdapter(); 
    user.userDataTable userd = usert.GetUserCreditByID(id); 
    foreach (user.userRow R in userd) 
    { 
     amount = R.Amount; 
    } 
    usert.Dispose(); 
    userd.Dispose(); 

    return amount; 
} 

,当我调用这个函数,我会得到这个错误:

未能启用约束。一个或多个行包含违反 非空,唯一或外键 约束的值。

,但是当我改变DAL的SQL查询到这一点:

SELECT  userID, username, password, address1, address2, tel1, tel2, cell, active, email, showEmail, last_login, Amount, registerdate, websiteUrl, vote, registerIP, city, 
         firstname, lastname 
FROM   [user] 
WHERE  (userID = @userid) 

一切正常

我茫然的这个,是什么问题?

无论如何,最好在用户表中包含所有字段;也许是因为字段被忽略,它插入null?可能是一个舒展......

更重要的是,如果你只是想这两个领域,所以,你必须在更新更细粒度的控制,并可以正确更新该字段使用更新的存储过程。如果将更新过程映射到表,那么更新应该可以正常工作。

+0

我想这就是唯一的答案 有类型数据集的一些问题,但他们让我的生活变得轻松,所以我不必再自己写DAL – 2010-08-12 20:09:28

+0

另一种选择(如果你有控制DataSet的话)会只需在你的DataSet中创建一个专用的表格就可以了。 – 2010-08-12 20:40:23

我将不得不猜测抛出异常的位置(这是一个建议,将它包含在你的问题中,因为它更容易给你正确的答案:)) 但我猜测它是在这条线:

user.userDataTable userd = usert.GetUserCreditByID(id); 

如果你userDataTable有约束有一个非常好的机会,返回的结果是违反了其中的一些,因为你实际上只是返回每个这也解释了为什么在返回的所有字段记录的一个子集修复了这个问题(如果数据库中的约束在类型化数据集中被镜像,这至少会成立)

+0

这是我有问题,但我真的不明白的地方是问题出现的形式精确一致。 所以我想我应该将所有记录添加到我的数据表中,然后检索我想要的任何内容。 视为 – 2010-08-12 20:11:56

您在DAL中使用了一个类型化的DataSet,对吗?如果是这样,你可以在DataSet中的EnforceConstraints属性设置为false此查询的时间,它应该忽略你的一些字段为空。

+0

即使强制约束关闭我有同样的问题 – 2010-08-12 20:07:54