我需要使用列名稱獲取列的數據類型。我在C#中編寫代碼。情況是我有一個視圖,它將某些日期轉換爲varchar,所以我可以更好地顯示它們(沒有時間精確)。但是,這意味着列的數據類型現在不正確。我想要做的是使用列名從DataTable模式中查找列,然後獲取該列的數據類型。我會從主表中收集實際的數據類型,而不是在這種情況下的視圖。想法?從列名稱獲取數據類型
回答
我不明白如何從數值中推斷出類型。如果代碼中包含視圖和列名稱的結果,那麼視圖使用的表的信息將在此時丟失。
當然,如果你知道它的名字,你可以得到有關表格的信息;
SELECT TOP 0 * FROM <<tableName>>
或使用動態管理視圖:可以使用這樣一個簡單的查詢完成,也可
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('<<tableName>>')
在第一種情況下,使用GetSchemaTable上的IDataReader和迭代行找到你的專欄按名字;在第二種情況下,您可以遍歷結果集本身並以這種方式找到您的列。
我可以得到表的模式很好,我只需要知道該表中的列的列名的數據類型。舉例來說,我有一個包含姓名,出生日期,年齡欄的表格。我想知道名爲Birthdate的列的數據類型。但我擁有的是表架構和列名稱。 – steventnorris
你有什麼格式的表格模式? –
它是一個使用SqlDataReader對象上的GetSchemaTable()獲取的DataTable C#對象。 – steventnorris
如果您使用SQL Server,則可以使用SET FMTONLY。它僅向客戶端返回元數據。它可以用來測試響應的格式而不需要實際運行查詢。
SqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "SET FMTONLY ON; select column from table; SET FMTONLY OFF";
SqlDataReader reader = cmd.ExecuteReader();
SqlDbType type = (SqlDbType)(int)reader.GetSchemaTable().Rows[0]["ProviderType"];
INFORMATION_SCHEMA.COLUMNS表提供了你需要比SYS.COLUMNS表什麼更明確的信息。 你可以嘗試以下方法:
SELECT data_type, character_maximum_length
FROM information_schema.columns
WHERE table_name = 'tableName' AND column_name = 'columnName'
- 1. 從datacontext獲取強類型列名稱
- 2. 從recordset.field.type屬性獲取ADO數據類型的名稱?
- 3. 從PRAGMA獲取名稱和類型table_info()
- 4. 按名稱獲取類型
- 5. 從列計數中獲取列名稱
- 6. 使用.net獲取名稱表,名稱列,名稱數據
- 7. 從AbstractTableModel獲取列名稱
- 8. C#獲取泛型類型名稱
- 9. 獲取類名稱函數的名稱
- 10. 從System.Drawing.Brushes獲取名稱和類型的配對列表
- 11. 獲取泛型類的泛型參數的類型名稱
- 12. 如何從類型名稱中獲取類名?
- 13. 獲取類模板的類型名稱
- 14. PHP - 獲取數據庫名稱列表
- 15. F#獲取數據庫列名和數據類型
- 16. 如何從數據庫獲取名稱?
- 17. 從模型中獲取模型類型的詳細名稱
- 18. 使用列名稱從列中獲取數據?
- 19. 獲取本地變量的名稱和數據類型
- 20. Umbraco,通過名稱和數據類型獲取節點
- 21. 從數據庫獲取表名,其中包含特定的數據類型列
- 22. 從類型名稱
- 23. 從父類獲取子類名稱
- 24. 從擴展類中獲取類名稱
- 25. 直接從數據庫獲取Django模型的表名稱
- 26. 如何獲取文件類型名稱?
- 27. C#獲取頁面類型名稱?
- 28. 獲取子屬性名稱強類型
- 29. 獲取變量類型名稱
- 30. javascript獲取類型/實例名稱
在SqlDataReader對象上使用GetSchemaTable()收集的DataTable上的這項工作? – steventnorris
GetSchemaTable返回一個DataTable,所以它應該工作。 – kol
那麼它似乎架構表不包含sql表的列名稱。每行表示sql表的一列,列是屬性(如列名和數據類型),所以這種方法似乎不起作用。 – steventnorris