我們正在使用C#創建WinStore應用程序,該應用程序在SQLite數據庫中本地存儲一些數據。我們目前使用SQLite-net庫來訪問數據庫。數據庫中有許多表具有基於客戶端數據的動態模式。這些表的模式只在運行時才知道。查詢模式僅在運行時已知的表格
我們還沒有能夠用SQLite-net庫查詢這些動態表。是否有可能用SQLite-net庫查詢這些表?是否有不同的庫可以提供類似的功能?
我們正在使用C#創建WinStore應用程序,該應用程序在SQLite數據庫中本地存儲一些數據。我們目前使用SQLite-net庫來訪問數據庫。數據庫中有許多表具有基於客戶端數據的動態模式。這些表的模式只在運行時才知道。查詢模式僅在運行時已知的表格
我們還沒有能夠用SQLite-net庫查詢這些動態表。是否有可能用SQLite-net庫查詢這些表?是否有不同的庫可以提供類似的功能?
sqlite_master表包含有關數據庫中對象(如表)的元數據。您可以像任何其他表一樣查詢該表。請注意,這是一個系統表,您不能直接操作它,並且在創建數據庫對象時創建/更新它。
一旦查詢了表格,就必須根據該元數據動態構建查詢以查詢動態模式。
這裏還有一個SO發佈覆蓋查詢表:How to list the tables in an SQLite database file that was opened with ATTACH?
它在SQLite的文檔還討論:http://www.sqlite.org/sqlite.html
見「題外話:查詢SQLITE_MASTER表」
編輯:
因爲您將基於元數據創建動態SQL,您需要一種可以執行基於文本的t-sql查詢的方法,動態構建。像SQLite中網這種方法:
public List<T> Query<T> (string query, params object[] args)
*注:我沒有使用SQLite的淨直接構建動態SQL,但我已經使用其他驅動程序(包括C之一)來做到這一點。
,你將不能夠做到,因爲它是動態SQL(除非你想要做的C#代碼生成和生成代碼反射)是使用簡單的泛型風格的查詢方法是什麼:
var query = conn.Table<Stock>().Where(v => v.Symbol.StartsWith("A"));
那模式在編譯時知道對象和表結構時最有用。
請注意,還有一個名爲sqlite_temp_master的表列出臨時表。例如,上面的文檔說明,該.tables CMDLINE快捷實際上做這個查詢:
SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1
注意,它也過濾掉sqlite_%,因爲該前綴保留給系統表。
這是獲取有關表格模式信息的很好的信息。是否可以使用SQLite-net庫來查詢這些僅在運行時已知的表中的一個表? – Scott 2013-04-11 00:14:52
是的 - 您將使用.net包裝來執行上面的查詢。一旦獲得了表的名稱,就可以使用這些名稱動態創建查詢並執行它。 – bryanmac 2013-04-11 00:19:27
但正如文檔所說,sqlite-net不是ado.net驅動程序 - 您必須使用Mono.Data.SQLite或csharp-sqlite。它歸結爲需要執行您動態構建的字符串sql語句。不是sqlite-net的泛型類型方法。 – bryanmac 2013-04-11 00:23:57