Ice*_*ind 5 c# sqlite ado.net system.data.sqlite
我试图使用C#在SQLite中动态获取我的一个视图的模式.我正在使用此代码:
using (var connection = new SQLiteConnection(ConnectionString))
{
connection.Open();
using (DataTable columns = connection.GetSchema("Columns"))
{
foreach (DataRow row in columns.Rows)
{
string dataType = ((string) row["DATA_TYPE"]).Trim();
// doing irrelevant other stuff here
}
}
}
Run Code Online (Sandbox Code Playgroud)
除了一个视图外,它适用于我的所有表格和视图.由于某种原因,所调用字段的数据类型将显示为SaleAmount空白.row["DATA_TYPE"]元素中没有任何内容.
这是我的观点:
SELECT [Order Subtotals].Subtotal AS SaleAmount,
Orders.OrderID,
Customers.CompanyName,
Orders.ShippedDate
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID
JOIN [Order Subtotals] ON Orders.OrderID = [Order Subtotals].OrderID
WHERE ([Order Subtotals].Subtotal >2500)
AND (Orders.ShippedDate BETWEEN DATETIME('1997-01-01') And DATETIME('1997-12-31'))
Run Code Online (Sandbox Code Playgroud)
我使用标准的System.Data.SQLite库.任何人都知道为什么会出现空白?就像我说的那样,在这一个视图中只发生在这一个领域.
UPDATE
我想出了如何复制这个问题.显然,如果视图包含聚合函数,例如Sum,则GetSchema返回空数据类型.有人知道解决方法吗?
System.Data.SQLite 支持针对这种情况的基于 SQL 的“解决方法”。
请查看此处的说明:
http://system.data.sqlite.org/index.html/artifact/c87341d109c60a64
你的 SQL 应该看起来像这样(抱歉,我不是在真正的 PC 上检查要使用的数据类型名称,但原理就在那里):
TYPES [DECIMAL], [INTEGER], [STRING], [DATETIME];
SELECT [Order Subtotals].Subtotal AS SaleAmount,
Orders.OrderID,
Customers.CompanyName,
Orders.ShippedDate
etc...
Run Code Online (Sandbox Code Playgroud)
更新我有了一台真正的电脑。上述内容将确保 GetSchema 具有所有列的数据类型。
注意:从我自己的测试来看,您不能在 VIEW 定义中使用 TYPES 关键字。当您执行 SELECT 语句来获取数据时,它只能出现在 .NET 代码中。当然,您可以使用 TYPES + SELECT 解决方法从 VIEW 定义中获取数据,没有问题;-)
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |