如何在DataTable中获取列的SQLType?[英] How to get the SqlType of a column in a DataTable?

本文是小编为大家收集整理的关于如何在DataTable中获取列的SQLType?的处理方法,想解了如何在DataTable中获取列的SQLType?的问题怎么解决?如何在DataTable中获取列的SQLType?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个从SQL数据库中获得的数据表:

using (SqlCommand cmd = new SqlCommand(query, _sqlserverDB))
{
    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
    {
        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet);
        result = (dataSet != null && dataSet.Tables != null && dataSet.Tables.Count > 0) ? dataSet.Tables[0] : null;
    }
}

当我尝试通过dataColumn.datatype获取每列的数据类型时,我获得了C#类型(INT32,INT64,String等).

问题:如何访问本机SQL数据类型(varchar,nvarchar,bigint ...)而不是C#类型?

我尝试了dataColumn.datatype.UnderlyingSystemType,结果是相同的.

推荐答案

您不能因为System.Data.DataTable(或DataColumn,或DataSet或DataRow ...)是一个通用.NET数据容器,无论您在特定数据库引擎上,它都以相同的方式工作方式从.

加载您的数据

这意味着您使用的是SQL Server,MySQL,Access,PostgreSQL或其他任何内容的.NET连接器,DataTable和DataColumn类始终相同,并且是ado.net对象,可以使用任何DB引擎,因此列以您发现的.NET类型键入.

其他推荐答案

当然可以采用列的sqldbtype,答案就在So: link .

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"];

其他推荐答案

SqlConnection SqlCon = new SqlConnection("Data Source=(local);Database=dbname;Integrated Security=SSPI;");

SqlCon.Open();

SqlCmd = SqlCon.CreateCommand();
SqlCmd.CommandText = "select * from Tablename";

SqlDataReader SqlDr = SqlCmd.ExecuteReader();
SqlDr.Read();

int i = 0;

while (i < SqlDr.FieldCount)
{ 
   MessageBox.Show(SqlDr.GetDataTypeName(i));
   i++;
}

本文地址:https://www.itbaoku.cn/post/1794028.html