[英]Need to get column name and its type of a sql query
我想从给定的sql连接的sql select语句中获取列及其数据类型。该代码应能够连接不同的RDBMS,例如(sql server,My sql,Oracle等)。
例如:
1.select * from People
2.select Name As UserName,Id As Identity,Address from People
所需结果:
1.Name-string, Id-int, Address-string
2.UserName-string ,Identity-int, Address-string
如果您可以在c#中的DataTable中获得select语句的结果,我将尝试以下操作:
DataTable table = GetDataTable();
foreach (DataColumn column in table.Columns)
{
var name = column.ColumnName; // the column name
var type = column.DataType.ToString(); // the type as string
}
希望能帮助到你。
当遇到相同的问题时,我尝试了当前出现的两个答案,但是在某些情况下都无法正常工作。 例如,他们不能区分DateTime
和Date
,不能返回某些数据类型的大小decimal(38,10)
例如, decimal(38,10)
),不支持某些SQL本机类型(例如Money
等)。最后我最终得到了以下解决方案:
var schema = yourSqlCommand.ExecuteReader().GetSchemaTable();
var Columns = schema.Rows.Cast<DataRow>().Select(row=>new DbColumnInfo
{
Name = row.Field<string>("ColumnName"),
SqlDataType = GetSqlTypeFromSchemaRow(row) //extract information about SQL type which I need, using schemaRow.Field<string>("DataTypeName"), schemaRow.Field<short>("NumericPrecision"), schemaRow.Field<short>("NumericScale") etc.
}).ToArray();
GetSchemaTable()
函数返回SQL表,该表不包含您选择的数据,而是有关其列的元数据(名称,SQL类型,可为空性,标识参数,主键标记以及许多其他数据)。 在此处查看完整的列说明。
我仅将其与MS SQL Server一起使用,但是方法ExecuteReader()
和GetSchemaTable()
存在于基类中,因此我相信这几乎适用于所有SQL提供程序。
至于支持的SQL语句-看起来就像是返回单个数据集的任何SQL。 我尝试了联接,计算列,存储过程和函数。
对于SQL Server:
您也可以查看DataSet上的FillSchema方法以加载架构信息。
一旦有了,就可以遍历列及其类型。
dataSet.Table["SomeTable"].Columns
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.