C# 需要获取sql查询的列名及其类型
我想从给定sql连接的sql select语句中获取列及其数据类型。代码应该能够连接不同的RDBMS,如sql server、My sql、Oracle等 例如: 所需结果: 对于SQL Server: 看一看 您还可以查看数据集上的方法以加载模式信息 一旦有了它,您就可以迭代列及其类型C# 需要获取sql查询的列名及其类型,c#,sql,ado.net,C#,Sql,Ado.net,我想从给定sql连接的sql select语句中获取列及其数据类型。代码应该能够连接不同的RDBMS,如sql server、My sql、Oracle等 例如: 所需结果: 对于SQL Server: 看一看 您还可以查看数据集上的方法以加载模式信息 一旦有了它,您就可以迭代列及其类型 dataSet.Table["SomeTable"].Columns 如果可以在c中的DataTable中获得select语句结果,我将尝试以下方法: DataTable table = Ge
dataSet.Table["SomeTable"].Columns
如果可以在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
}
希望能有所帮助。当我遇到同样的问题时,我尝试了目前的两个答案,但在某些情况下,这两个答案都不起作用。例如,它们不能区分日期时间和日期,不能返回某些数据类型的大小小数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?SQL Server、Oracle MS Access?没有独立于数据库的方法来执行此操作。您必须为每个数据库计算出它。我建议对每个数据库单独提问。但我需要连接多个RDBMS。。。我需要在不使用连接字符串中的提供程序的情况下获取此内容。
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
}
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();