【发布时间】:2015-04-22 15:56:22
【问题描述】:
假设我有以下 SQL 架构:
SQL
TABLE Person COLUMNS
(
ID AS INTEGER,
Firstname AS varchar(100),
Lastname AS varchar(100),
Fullname AS (Firstname + ' ' + Lastname)
)
GO
INSERT INTO Person (ID, Firstname, Lastname) VALUES (1, 'Simon', 'Dugré')
GO
VB 检索类
Dim da as new SqlDataAdapter("SELECT ID, Firstname, Lastname, FullName FROM Person WHERE ID = 1", cn)
Dim ds as new DataSet()
da.Fill(ds)
da.FilleSchema(ds) ' I tried this before or after da.fill, just in case '
Dim dr as DataRow = ds.table(0).row(0)
Assert.IsTrue(dr("Firstname") = "Simon") ' Returns true '
Assert.IsTrue(dr("Lastname") = "Dugré") ' Returns true '
Assert.IsTrue(dr("Fullname") = "Simon Dugré") ' Returns true '
dr("Firstname") = "Nomis"
Assert.IsTrue(dr("Fullname") = "Nomis Dugré") ' Return False, it is still "Simon Dugré" in it. '
在即时窗口中调试时,我看到以下内容:
?dr.table.Columns("Fullname").Computed ' It says it is set to false... Duhhh... no!'
更多信息
我在一些地方看到有一种方法可以通过引用属性而不是 SQL 字段直接从代码中“硬编码”计算列公式......但我不能这样做,因为为了保持这个问题的可读性,我删除了很多代码,但这实际上是整个抽象和通用场景的一部分。
我的问题是,实际上有没有一种方法可以在调用da.Fill 或da.FillSchema 时直接从SQL 中检索公式?那么在更改Firstname或Lastname时,会自动对Fullname计算列产生影响?
【问题讨论】:
标签: sql .net vb.net sqldatareader