我需要使用列名称获取列的数据类型。我在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