我使用VS2010 DataSet设计器使用类似于此的可选参数进行一些选择查询:
SELECT CustomerID, FirstName, JoinDate, etc
FROM tblCustomers
WHERE (
(@CustomerID IS NULL OR CustomerID = @CustomerID) AND
(@FirstName IS NULL OR FirstName = @FirstName) AND
(@JoinedBefore IS NULL OR JoinDate < @JoinedBefore) AND
(@JoinedAfter IS NULL OR JoinDate > @JoinedAfter) AND
.. etc ..
)
对这些属性数据类型的推断并允许DB null几乎总是错误的。我最终为日期时间设置了字符串类型,反之亦然。超过一半的字段始终标记为非空。
这显然对我的疑问造成了严重破坏。我可以手动更改这些推断,但每次我必须更新TableAdapter时,它会将它们全部重置为它认为最好的!任何人都知道如何a)得到正确的推论,或b)以永久的方式覆盖它们?
答案 0 :(得分:0)
似乎VS根据查询中第一次出现的参数推断出数据类型。因为我把我的@Parater IS NULL或者......首先,这让设计师感到困惑并导致它在很多时候推断错误。我交换了查询的顺序,现在它完全推断出来了:
SELECT CustomerID, FirstName, JoinDate, etc
FROM tblCustomers
WHERE (
(CustomerID = @CustomerID OR @CustomerID IS NULL AND
(FirstName = @FirstName OR @FirstName IS NULL) AND
(JoinDate < @JoinedBefore OR @JoinedBefore IS NULL) AND
(JoinDate > @JoinedAfter OR @JoinedAfter IS NULL) AND
.. etc ..
)