2015-05-30 14 views
5

Tôi đang cố gắng tự động lấy giản đồ của một trong các chế độ xem của tôi trong SQLite bằng C#. Tôi đang sử dụng mã này:Báo cáo ADO.Net loại dữ liệu trống trong 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 
     } 
    } 
} 

Hoạt động của nó hoàn hảo cho tất cả các bảng và chế độ xem ngoại trừ một chế độ xem. Vì một lý do nào đó, loại dữ liệu cho trường có tên SaleAmount sẽ bị trống. Không có gì trong phần tử row["DATA_TYPE"].

Đây là quan điểm của tôi:

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')) 

Tôi đang sử dụng standard System.Data.SQLite thư viện. Bất cứ ai có bất kỳ ý tưởng tại sao điều này sẽ đi lên trống? Như tôi đã nói, nó đang xảy ra chỉ trên một lĩnh vực này trong một lần xem này.

CẬP NHẬT

tôi đã tìm ra cách để nhân đôi vấn đề này. Dường như nếu chế độ xem chứa hàm tổng hợp, chẳng hạn như Sum, GetSchema sẽ trả về một loại dữ liệu trống. Bất cứ ai biết về một workaround?

Trả lời

4

System.Data.SQLite hỗ trợ "workaround" dựa trên SQL cho chính xác trường hợp này.

Có một cái nhìn tại đây để được hướng dẫn:

http://system.data.sqlite.org/index.html/artifact/c87341d109c60a64

Bạn SQL nên tìm một cái gì đó như thế này (xin lỗi tôi không phải ở một máy tính thật để kiểm tra tên kiểu dữ liệu nào sử dụng, nhưng nguyên tắc là có):

TYPES [DECIMAL], [INTEGER], [STRING], [DATETIME]; 
SELECT [Order Subtotals].Subtotal AS SaleAmount, 
     Orders.OrderID, 
     Customers.CompanyName, 
     Orders.ShippedDate 
etc... 

CẬP NHẬT tôi đến một máy tính thực sự. Ở trên sẽ đảm bảo GetSchema có các kiểu dữ liệu cho tất cả các cột.

LƯU Ý: Nó xuất hiện, từ thử nghiệm của riêng tôi, mà bạn không có thể có các loại từ khóa trong một định nghĩa VIEW. Nó chỉ có thể hiện diện trong mã .NET của bạn khi bạn thực hiện câu lệnh SELECT để lấy dữ liệu. Tất nhiên, bạn có thể sử dụng giải pháp TYPES + SELECT để lấy dữ liệu từ định nghĩa VIEW, không có vấn đề gì ;-)

+0

Điều này giải thích vấn đề, nhưng nếu tôi hiểu chính xác, '[TYPES]' mong đợi tôi đã biết loại dữ liệu, phải không? Vấn đề là, tôi đang gọi 'GetSchema()' bởi vì tôi không biết kiểu dữ liệu. Xem tiến thoái lưỡng nan của tôi? – Icemanind

+0

Ah tôi hiểu rồi. Cảm ơn bạn @ mish256. Điều này sẽ làm việc cho tôi! – Icemanind

Các vấn đề liên quan